Files

72 lines
2.1 KiB
Python

import dataclasses
from typing import Annotated
from fastapi import HTTPException, Request, UploadFile
from fastapi.params import File
from folkugat_web.api.router import get_router
from folkugat_web.fragments.sessio import cartell
from folkugat_web.services import auth
from folkugat_web.services import files as files_service
from folkugat_web.services import sessions as sessions_service
router = get_router()
@router.get("/api/sessio/{session_id}/cartell")
def get_cartell(
request: Request,
logged_in: auth.LoggedIn,
session_id: int,
):
return cartell.cartell(request, session_id, logged_in)
@router.get("/api/sessio/{session_id}/cartell/editor")
def get_cartell_editor(
request: Request,
_: auth.RequireLogin,
session_id: int,
):
return cartell.cartell_editor(request, session_id)
@router.put("/api/sessio/{session_id}/cartell")
async def set_cartell(
request: Request,
logged_in: auth.RequireLogin,
session_id: int,
upload_file: Annotated[UploadFile, File()],
):
session = sessions_service.get_session(session_id=session_id)
if not session:
raise HTTPException(status_code=404, detail="Could not find session")
url = await files_service.store_session_cartell(
session_id=session_id,
upload_file=upload_file,
)
new_session = dataclasses.replace(
session,
cartell_url=url,
)
sessions_service.set_session(new_session)
return cartell.cartell(request, session_id, logged_in)
@router.delete("/api/sessio/{session_id}/cartell")
async def delete_cartell(
request: Request,
logged_in: auth.RequireLogin,
session_id: int,
):
session = sessions_service.get_session(session_id=session_id)
if not session:
raise HTTPException(status_code=404, detail="Could not find session")
if session.cartell_url:
new_session = dataclasses.replace(
session,
cartell_url=None,
)
sessions_service.set_session(new_session)
files_service.clean_orphan_files()
return cartell.cartell(request, session_id, logged_in)