Web - 1
This commit is contained in:
@@ -118,8 +118,63 @@ def set_visibility(
|
||||
|
||||
# ── Hent playliste-indhold ────────────────────────────────────────────────────
|
||||
|
||||
@router.get("/playlists/{project_id}")
|
||||
def get_shared_playlist(
|
||||
@router.get("/public")
|
||||
def list_public_playlists(db: Session = Depends(get_db)):
|
||||
"""Hent alle public playlister — ingen login krævet."""
|
||||
projects = db.query(Project).filter_by(visibility="public").all()
|
||||
result = []
|
||||
for p in projects:
|
||||
owner = db.query(User).filter_by(id=p.owner_id).first()
|
||||
result.append({
|
||||
"id": p.id,
|
||||
"name": p.name,
|
||||
"owner": owner.username if owner else "?",
|
||||
"song_count": len(p.project_songs),
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
@router.post("/playlists/{project_id}/copy", status_code=201)
|
||||
def copy_playlist(
|
||||
project_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
me: User = Depends(get_current_user),
|
||||
):
|
||||
"""Kopiér en public playliste til brugerens egen konto."""
|
||||
p = db.query(Project).filter_by(id=project_id).first()
|
||||
if not p:
|
||||
raise HTTPException(404, "Playliste ikke fundet")
|
||||
if p.visibility != "public":
|
||||
raise HTTPException(403, "Kun public playlister kan kopieres")
|
||||
if p.owner_id == me.id:
|
||||
raise HTTPException(400, "Du ejer allerede denne playliste")
|
||||
|
||||
from app.models import Song
|
||||
owner = db.query(User).filter_by(id=p.owner_id).first()
|
||||
new_name = f"{p.name} (kopi fra {owner.username if owner else '?'})"
|
||||
|
||||
new_p = Project(
|
||||
owner_id=me.id,
|
||||
name=new_name,
|
||||
description=p.description or "",
|
||||
visibility="private",
|
||||
)
|
||||
db.add(new_p)
|
||||
db.flush()
|
||||
|
||||
for ps in p.project_songs:
|
||||
from app.models import ProjectSong
|
||||
db.add(ProjectSong(
|
||||
project_id=new_p.id,
|
||||
song_id=ps.song_id,
|
||||
position=ps.position,
|
||||
status="pending",
|
||||
is_workshop=ps.is_workshop,
|
||||
dance_override=ps.dance_override or "",
|
||||
))
|
||||
|
||||
db.commit()
|
||||
return {"detail": "Kopieret", "id": new_p.id}
|
||||
project_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
me: User = Depends(get_current_user),
|
||||
|
||||
Reference in New Issue
Block a user