225 lines
5.8 KiB
Python
225 lines
5.8 KiB
Python
from typing import Annotated
|
|
|
|
from fastapi import Form, Request
|
|
from folkugat_web.api import router
|
|
from folkugat_web.fragments import live, sessio
|
|
from folkugat_web.services import auth
|
|
from folkugat_web.services.temes import write as temes_service
|
|
from folkugat_web.templates import templates
|
|
|
|
|
|
@router.get("/sessio/{session_id}")
|
|
def page(
|
|
request: Request,
|
|
logged_in: auth.LoggedIn,
|
|
session_id: int,
|
|
):
|
|
return templates.TemplateResponse(
|
|
"index.html",
|
|
{
|
|
"request": request,
|
|
"page_title": "Folkugat",
|
|
"content": f"/api/content/sessio/{session_id}",
|
|
"logged_in": logged_in,
|
|
}
|
|
)
|
|
|
|
|
|
@router.get("/api/content/sessio/{session_id}")
|
|
def contingut(
|
|
request: Request,
|
|
logged_in: auth.LoggedIn,
|
|
session_id: int,
|
|
):
|
|
return sessio.pagina(request, session_id, logged_in)
|
|
|
|
|
|
@router.put("/api/sessio/{session_id}/live")
|
|
def set_live(
|
|
request: Request,
|
|
_: auth.RequireLogin,
|
|
session_id: int,
|
|
):
|
|
return live.start_live_session(request=request, session_id=session_id)
|
|
|
|
|
|
@router.delete("/api/sessio/{session_id}/live")
|
|
def stop_live(
|
|
request: Request,
|
|
_: auth.RequireLogin,
|
|
session_id: int,
|
|
):
|
|
return live.stop_live_session(request=request, session_id=session_id)
|
|
|
|
|
|
@router.post("/api/sessio/{session_id}/set")
|
|
def add_set(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
):
|
|
return sessio.add_set(request=request, session_id=session_id, logged_in=logged_in)
|
|
|
|
|
|
@router.get("/api/sessio/{session_id}/set/{set_id}")
|
|
def get_set(
|
|
request: Request,
|
|
logged_in: auth.LoggedIn,
|
|
session_id: int,
|
|
set_id: int,
|
|
):
|
|
return sessio.get_set(request=request, session_id=session_id, set_id=set_id, logged_in=logged_in)
|
|
|
|
|
|
@router.delete("/api/sessio/{session_id}/set/{set_id}")
|
|
def delete_set(
|
|
_: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
):
|
|
return sessio.delete_set(session_id=session_id, set_id=set_id)
|
|
|
|
|
|
@router.post("/api/sessio/{session_id}/set/{set_id}")
|
|
def add_tema(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
):
|
|
return sessio.add_tema(request=request, session_id=session_id, set_id=set_id, logged_in=logged_in)
|
|
|
|
|
|
@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
|
|
def get_tema(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
):
|
|
return sessio.get_tema(
|
|
request=request, session_id=session_id, set_id=set_id, entry_id=entry_id, logged_in=logged_in)
|
|
|
|
|
|
@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/editor")
|
|
def get_tema_editor(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
):
|
|
return sessio.get_tema_editor(
|
|
request=request, session_id=session_id, set_id=set_id, entry_id=entry_id, logged_in=logged_in)
|
|
|
|
|
|
@router.delete("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
|
|
def delete_tema(
|
|
_: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
):
|
|
return sessio.delete_tema(session_id=session_id, set_id=set_id, entry_id=entry_id)
|
|
|
|
|
|
@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/busca")
|
|
def busca_tema(
|
|
request: Request,
|
|
_: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
query: str,
|
|
):
|
|
return sessio.busca_tema(
|
|
request=request,
|
|
session_id=session_id,
|
|
set_id=set_id,
|
|
entry_id=entry_id,
|
|
query=query,
|
|
)
|
|
|
|
|
|
@router.put("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
|
|
def set_tema(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
tema_id: Annotated[int, Form()],
|
|
):
|
|
return sessio.set_tema(
|
|
request=request,
|
|
logged_in=logged_in,
|
|
session_id=session_id,
|
|
set_id=set_id,
|
|
entry_id=entry_id,
|
|
tema_id=tema_id,
|
|
)
|
|
|
|
|
|
@router.put("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/unknown")
|
|
def set_tema_unknown(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
):
|
|
return sessio.set_tema(
|
|
request=request,
|
|
logged_in=logged_in,
|
|
session_id=session_id,
|
|
set_id=set_id,
|
|
entry_id=entry_id,
|
|
tema_id=None,
|
|
)
|
|
|
|
|
|
@router.post("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
|
|
def set_tema_new(
|
|
request: Request,
|
|
logged_in: auth.RequireLogin,
|
|
session_id: int,
|
|
set_id: int,
|
|
entry_id: int,
|
|
title: Annotated[str, Form()],
|
|
):
|
|
new_tema = temes_service.create_tema(title=title)
|
|
return sessio.set_tema(
|
|
request=request,
|
|
logged_in=logged_in,
|
|
session_id=session_id,
|
|
set_id=set_id,
|
|
entry_id=entry_id,
|
|
tema_id=new_tema.id,
|
|
)
|
|
|
|
|
|
# @router.get("/api/sessio/{session_id}/set/{set_id}/score")
|
|
# async def render(
|
|
# request: Request,
|
|
# _: auth.RequireLogin,
|
|
# session_id: int,
|
|
# set_id: int,
|
|
# ):
|
|
# set_entry = playlists_service.get_set(session_id=session_id, set_id=set_id)
|
|
# if not set_entry:
|
|
# raise HTTPException(status_code=404, detail="Could not find set!")
|
|
# set_entry = playlists_service.add_temes_to_set(set_entry)
|
|
# tune_set = lilypond_build.set_from_set(set_entry=set_entry)
|
|
# set_source = lilypond_source.set_source(tune_set=tune_set)
|
|
# pdf_result = await lilypond_render.render(
|
|
# source=set_source,
|
|
# output=lilypond_render.RenderOutput.PDF,
|
|
# )
|
|
# if output_filename := pdf_result.result:
|
|
# score_render_url = files.get_db_file_path(output_filename)
|
|
# # return temes.score_render(request=request, score_id=score_id, score_render_url=score_render_url)
|
|
# return HTMLResponse(content=score_render_url)
|
|
# else:
|
|
# return HTMLResponse()
|