Nye-TeeOff/kode_eksport_1/backend_sync_greenfee_py.txt

79 lines
No EOL
3.1 KiB
Text

import asyncio, asyncpg, urllib.request, json
DB_URL = "postgresql://teeoff_admin:teeoff_secret_password@db:5432/teeoff"
# Vi fjerner acf_format=standard da rå-feltnavnene er tryggere her
WP_API_URL = "https://teeoff.no/wp-json/wp/v2/golfbaner?per_page=100"
def decode_html(text):
if not text: return ""
return str(text).replace('&', '&').replace('&', '&').replace(' ', ' ').strip()
async def run_greenfee_sync():
print("🎯 Starter GREENFEE-SYNC v1.2 (Basert på rå-API mapping)...")
conn = await asyncpg.connect(DB_URL)
page = 1
total_updated = 0
while True:
try:
req = urllib.request.Request(f"{WP_API_URL}&page={page}", headers={'User-Agent': 'TeeOff-Sync'})
with urllib.request.urlopen(req) as response:
data = json.loads(response.read().decode())
except: break
if not data: break
for post in data:
slug = post['slug']
acf = post.get('acf', {})
# Henter banenavn for å gruppere riktig
bane_1_navn = acf.get('navn_pa_hovedbane') or "Hovedbanen"
bane_2_navn = acf.get('navn_pa_sekundar_bane') or "Bane 2"
final_greenfee = []
# --- MAPPER BANE 1 (Voksne + Junior) ---
voksne_1 = acf.get('greenfee_-_voksne') or []
junior_1 = acf.get('greenfee_-_junior') or []
for i, item in enumerate(voksne_1):
row = {
"banenavn": bane_1_navn,
"priskategori": item.get('priskategori'),
"pris_voksne": item.get('pris_voksne')
}
# Legger til juniorpris hvis den finnes på samme index
if i < len(junior_1):
row["pris_junior"] = junior_1[i].get('pris_junior')
final_greenfee.append(row)
# --- MAPPER BANE 2 (Voksne + Junior) ---
voksne_2 = acf.get('greenfee_-_voksne_bane_to') or []
junior_2 = acf.get('greenfee_-_junior_bane_to') or []
for i, item in enumerate(voksne_2):
row = {
"banenavn": bane_2_navn,
"priskategori": item.get('priskategori_bane_to'),
"pris_voksne": item.get('pris_voksne_bane_to')
}
if i < len(junior_2):
row["pris_junior"] = junior_2[i].get('pris_junior_bane_to')
final_greenfee.append(row)
# Henter krav (Gjeste_krav)
reqs = decode_html(acf.get('krav_til_gjestespillere'))
if final_greenfee:
await conn.execute('''
UPDATE facilities SET greenfee = $1::jsonb, guest_requirements = $2 WHERE slug = $3
''', json.dumps(final_greenfee), reqs, slug)
print(f"✅ {slug}: Importerte {len(final_greenfee)} prisrader for {bane_1_navn}/{bane_2_navn}")
total_updated += 1
page += 1
await conn.close()
print(f"\n✨ Ferdig! Oppdaterte priser for {total_updated} anlegg.")
if __name__ == "__main__":
asyncio.run(run_greenfee_sync())