diff --git a/linedance-api/app/routers/sync.py b/linedance-api/app/routers/sync.py index 6a85680f..d8295e3b 100644 --- a/linedance-api/app/routers/sync.py +++ b/linedance-api/app/routers/sync.py @@ -155,58 +155,47 @@ def push( # ── Sang-dans tags (brugerens egne) ─────────────────────────────────────── from app.models import SongDance, SongAltDance - # Slet eksisterende song_dances for disse sange og genindsæt - affected_song_ids = set( - song_id_map[sd.song_local_id] - for sd in payload.song_dances - if sd.song_local_id in song_id_map - ) - if affected_song_ids: - db.query(SongDance).filter( - SongDance.song_id.in_(affected_song_ids) - ).delete(synchronize_session=False) - db.flush() + # ── Sang-dans tags ──────────────────────────────────────────────────────── + from app.models import SongDance, SongAltDance + import sqlalchemy as _sa - with db.no_autoflush: - for sd in payload.song_dances: - song_id = song_id_map.get(sd.song_local_id) - if not song_id: - continue - level_id = level_map.get(sd.level_name.lower()) if sd.level_name else None - key = f"{sd.dance_name.lower()}|{level_id}" - dance_id = dance_id_map.get(key) - if not dance_id: - continue - db.add(SongDance( - song_id=song_id, dance_id=dance_id, - dance_order=sd.dance_order, - )) + for sd in payload.song_dances: + song_id = song_id_map.get(sd.song_local_id) + if not song_id: + continue + level_id = level_map.get(sd.level_name.lower()) if sd.level_name else None + key = f"{sd.dance_name.lower()}|{level_id}" + dance_id = dance_id_map.get(key) + if not dance_id: + continue + db.execute(_sa.text( + "INSERT IGNORE INTO song_dances (id, song_id, dance_id, dance_order) " + "VALUES (:id, :song_id, :dance_id, :dance_order)" + ), { + "id": str(__import__("uuid").uuid4()), + "song_id": song_id, + "dance_id": dance_id, + "dance_order": sd.dance_order, + }) - affected_alt_ids = set( - song_id_map[sa.song_local_id] - for sa in payload.song_alts - if sa.song_local_id in song_id_map - ) - if affected_alt_ids: - db.query(SongAltDance).filter( - SongAltDance.song_id.in_(affected_alt_ids) - ).delete(synchronize_session=False) - db.flush() - - with db.no_autoflush: - for sa in payload.song_alts: - song_id = song_id_map.get(sa.song_local_id) - if not song_id: - continue - level_id = level_map.get(sa.level_name.lower()) if sa.level_name else None - key = f"{sa.dance_name.lower()}|{level_id}" - dance_id = dance_id_map.get(key) - if not dance_id: - continue - db.add(SongAltDance( - song_id=song_id, dance_id=dance_id, - note=sa.note, - )) + for sa in payload.song_alts: + song_id = song_id_map.get(sa.song_local_id) + if not song_id: + continue + level_id = level_map.get(sa.level_name.lower()) if sa.level_name else None + key = f"{sa.dance_name.lower()}|{level_id}" + dance_id = dance_id_map.get(key) + if not dance_id: + continue + db.execute(_sa.text( + "INSERT IGNORE INTO song_alt_dances (id, song_id, dance_id, note) " + "VALUES (:id, :song_id, :dance_id, :note)" + ), { + "id": str(__import__("uuid").uuid4()), + "song_id": song_id, + "dance_id": dance_id, + "note": sa.note or "", + }) # ── Playlister ──────────────────────────────────────────────────────────── playlist_id_map = {}