Migrated links, lyrics and properties

This commit is contained in:
marc
2025-03-23 21:46:04 +01:00
parent c097811e40
commit d596861a2e
47 changed files with 1403 additions and 844 deletions

View File

@@ -0,0 +1,80 @@
import dataclasses
from typing import Annotated
from fastapi import HTTPException, Request
from fastapi.params import Form
from fastapi.responses import HTMLResponse
from folkugat_web.api import router
from folkugat_web.fragments.tema import lyrics as lyrics_fragments
from folkugat_web.services import auth
from folkugat_web.services.temes import lyrics as lyrics_service
@router.get("/api/tema/{tema_id}/lyric/{lyric_id}")
def lyric(
request: Request,
logged_in: auth.LoggedIn,
tema_id: int,
lyric_id: int,
):
lyric = lyrics_service.get_lyric_by_id(lyric_id=lyric_id, tema_id=tema_id)
if not lyric:
raise HTTPException(status_code=404, detail="Could not find lyric!")
return lyrics_fragments.lyric(request=request, logged_in=logged_in, lyric=lyric)
@router.put("/api/tema/{tema_id}/lyric/{lyric_id}")
def set_lyric(
request: Request,
logged_in: auth.RequireLogin,
tema_id: int,
lyric_id: int,
title: Annotated[str, Form()],
content: Annotated[str, Form()],
):
lyric = lyrics_service.get_lyric_by_id(lyric_id=lyric_id, tema_id=tema_id)
if not lyric:
raise HTTPException(status_code=404, detail="Could not find lyric!")
new_lyric = dataclasses.replace(lyric, title=title, content=content.strip())
lyrics_service.update_lyric(lyric=new_lyric)
return lyrics_fragments.lyric(request=request, logged_in=logged_in, lyric=new_lyric)
@router.post("/api/tema/{tema_id}/lyric")
def add_lyric(
request: Request,
logged_in: auth.RequireLogin,
tema_id: int,
):
lyric = lyrics_service.create_lyric(tema_id=tema_id)
return lyrics_fragments.lyric_editor(
request=request,
logged_in=logged_in,
lyric=lyric,
)
@router.delete("/api/tema/{tema_id}/lyric/{lyric_id}")
def delete_lyric(
tema_id: int,
lyric_id: int,
):
lyrics_service.delete_lyric(lyric_id=lyric_id, tema_id=tema_id)
return HTMLResponse()
@router.get("/api/tema/{tema_id}/editor/lyric/{lyric_id}")
def lyric_editor(
request: Request,
logged_in: auth.RequireLogin,
tema_id: int,
lyric_id: int,
):
lyric = lyrics_service.get_lyric_by_id(lyric_id=lyric_id, tema_id=tema_id)
if not lyric:
raise HTTPException(status_code=404, detail="Could not find lyric!")
return lyrics_fragments.lyric_editor(
request=request,
logged_in=logged_in,
lyric=lyric,
)