chore: add script to fix set names in db
Some checks are pending
Deploy Elmeg / deploy (push) Waiting to run
Some checks are pending
Deploy Elmeg / deploy (push) Waiting to run
This commit is contained in:
parent
ff411321c6
commit
a2f0965ff5
1 changed files with 105 additions and 0 deletions
105
backend/fix_set_names.py
Normal file
105
backend/fix_set_names.py
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
import requests
|
||||||
|
from sqlmodel import Session, select
|
||||||
|
from database import engine
|
||||||
|
from models import Performance, Show, Song
|
||||||
|
from import_elgoose import fetch_json
|
||||||
|
|
||||||
|
BASE_URL = "https://elgoose.net/api/v2"
|
||||||
|
|
||||||
|
def fix_set_names():
|
||||||
|
print("🔧 Fixing set names in database...")
|
||||||
|
|
||||||
|
with Session(engine) as session:
|
||||||
|
# Load maps (we need show_id and song_id mapping if we rely on API IDs...
|
||||||
|
# but API setlists endpoint returns show_id and song_id (El Goose IDs))
|
||||||
|
# We need to match existing performances by show/song/position.
|
||||||
|
|
||||||
|
# To avoid re-fetching ALL simple tables, let's just map on the fly or load needed.
|
||||||
|
# Actually, simpler:
|
||||||
|
# 1. Fetch setlists page.
|
||||||
|
# 2. For each item, find corresponding Performance in DB using elgoose IDs?
|
||||||
|
# Wait, Performance table doesn't store El Goose IDs directly (no external_id column).
|
||||||
|
# It links to Show and Song. Show and Song *might* not strictly store external ID either (only slug/etc).
|
||||||
|
# But `import_elgoose.py` maps them.
|
||||||
|
|
||||||
|
# We need to map El Goose Show ID -> local Show ID
|
||||||
|
# We need to map El Goose Song ID -> local Song ID
|
||||||
|
|
||||||
|
# This is tricky without storing external IDs.
|
||||||
|
# However, we can fetch all shows and map via date? No, Shows might map via...
|
||||||
|
# Wait, how does `import_elgoose.py` map?
|
||||||
|
# distinct show_id map.
|
||||||
|
|
||||||
|
print("Loading Show Map (by date + venue? No, we need external IDs)...")
|
||||||
|
# Since we didn't save external IDs on Show/Song tables, we have to rebuild the map
|
||||||
|
# the same way import_elgoose does (fetching shows to get their IDs and matching to DB).
|
||||||
|
# This is heavy.
|
||||||
|
|
||||||
|
# ALTERNATIVE:
|
||||||
|
# Just map by (Show Date, Song Title, Position)?
|
||||||
|
# Show Date is in Show table. Song Title in Song table. Performance has position.
|
||||||
|
# API setlist item has: showdate, songname, position, setnumber.
|
||||||
|
# This is sufficient!
|
||||||
|
|
||||||
|
page = 1
|
||||||
|
updated_count = 0
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print(f" Fetching page {page}...", end="", flush=True)
|
||||||
|
data = fetch_json("setlists", {"page": page})
|
||||||
|
if not data:
|
||||||
|
print(" Done.")
|
||||||
|
break
|
||||||
|
|
||||||
|
print(f" Loop {len(data)} items...", end="", flush=True)
|
||||||
|
|
||||||
|
for item in data:
|
||||||
|
show_date_str = item.get('showdate')
|
||||||
|
song_name = item.get('songname')
|
||||||
|
position = item.get('position')
|
||||||
|
setnumber = item.get('setnumber', '1')
|
||||||
|
|
||||||
|
if not show_date_str or not song_name:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Find DB records
|
||||||
|
# Join Performance -> Show, Song
|
||||||
|
db_perf = session.exec(
|
||||||
|
select(Performance)
|
||||||
|
.join(Show)
|
||||||
|
.join(Song)
|
||||||
|
.where(Show.date == show_date_str)
|
||||||
|
.where(Song.title == song_name)
|
||||||
|
.where(Performance.position == position)
|
||||||
|
).first()
|
||||||
|
|
||||||
|
if db_perf:
|
||||||
|
# Logic to determine set name
|
||||||
|
set_val = str(setnumber) if setnumber is not None else '1'
|
||||||
|
|
||||||
|
new_set_name = "Set 1"
|
||||||
|
if set_val.isdigit():
|
||||||
|
new_set_name = f"Set {set_val}"
|
||||||
|
elif set_val.lower() == 'e':
|
||||||
|
new_set_name = "Encore"
|
||||||
|
elif set_val.lower() == 'e2':
|
||||||
|
new_set_name = "Encore 2"
|
||||||
|
elif set_val.lower() == 's':
|
||||||
|
new_set_name = "Soundcheck"
|
||||||
|
else:
|
||||||
|
new_set_name = f"Set {set_val}"
|
||||||
|
|
||||||
|
if db_perf.set_name != new_set_name:
|
||||||
|
db_perf.set_name = new_set_name
|
||||||
|
session.add(db_perf)
|
||||||
|
updated_count += 1
|
||||||
|
|
||||||
|
session.commit()
|
||||||
|
print(f" Committed (Total updated: {updated_count})")
|
||||||
|
page += 1
|
||||||
|
|
||||||
|
if page > 200: # Safety
|
||||||
|
break
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
fix_set_names()
|
||||||
Loading…
Add table
Reference in a new issue