diff --git a/linedance-api/app/routers/sync.py b/linedance-api/app/routers/sync.py index 78af50d3..df847e79 100644 --- a/linedance-api/app/routers/sync.py +++ b/linedance-api/app/routers/sync.py @@ -199,12 +199,24 @@ def push( }) # ── Playlister ──────────────────────────────────────────────────────────── + # VIGTIGT: Match altid på local_id (= api_project_id på klienten), + # aldrig på navn — navn er ikke unikt og giver duplikater. playlist_id_map = {} for pl in payload.playlists: - existing = db.query(Project).filter_by( - owner_id=me.id, name=pl.name - ).first() + # Prøv først at finde via server-ID (local_id er klientens lokale db-id + # som tidligere er returneret som server-ID via playlist_id_map) + existing = None + if pl.local_id: + existing = db.query(Project).filter_by( + id=pl.local_id, owner_id=me.id + ).first() + # Fallback: navn — kun hvis vi aldrig har set denne liste før + if not existing: + existing = db.query(Project).filter_by( + owner_id=me.id, name=pl.name + ).first() if existing: + existing.name = pl.name existing.description = pl.description existing.visibility = pl.visibility # Opdater kun sange hvis push faktisk har sange med diff --git a/linedance-app/local/sync_manager.py b/linedance-app/local/sync_manager.py index d60ca673..b45abada 100644 --- a/linedance-app/local/sync_manager.py +++ b/linedance-app/local/sync_manager.py @@ -223,11 +223,13 @@ class SyncManager: "note": row["note"] or "", }) - # Playlister (kun lokalt oprettede — IKKE dem der kom fra serveren) + # Playlister — send alle (nye og eksisterende) til serveren. + # Brug api_project_id som local_id hvis den kendes — så serveren + # kan matche på ID og ikke oprette duplikater. playlists = [] for pl in conn.execute( "SELECT id, name, description, tags, api_project_id FROM playlists " - "WHERE name != '__aktiv__' AND (api_project_id IS NULL OR api_project_id = '')" + "WHERE name != '__aktiv__' AND is_deleted = 0" ).fetchall(): pl_songs = [] for ps in conn.execute(""" @@ -246,8 +248,11 @@ class SyncManager: "is_workshop": bool(ps["is_workshop"]), "dance_override": ps["dance_override"] or "", }) + # Brug api_project_id som local_id hvis den kendes — + # serveren bruger dette til at finde eksisterende liste + local_id = pl["api_project_id"] or str(pl["id"]) playlists.append({ - "local_id": str(pl["id"]), + "local_id": local_id, "name": pl["name"], "description": pl["description"] or "", "tags": pl["tags"] or "",