from typing import Optional from fastapi import APIRouter, Request, status, responses, Query from fastapi.security.utils import get_authorization_scheme_param from fastapi.templating import Jinja2Templates from src.core.config import Settings from src.core.security import get_current_user_from_token from src.db.models.media import MediaLofi from src.db.models.admin import Profile from src.db.repository.media.lofi import create_new_lofi from src.db.session import SessionDep from src.webapps.media.forms import AddLinkForm templates = Jinja2Templates(directory="src/templates") router = APIRouter(include_in_schema=False, prefix="/media") @router.get("/lofis") def get_medialofis(db: SessionDep, request: Request, msg: Optional[str] = None, review: Optional[bool] = Query(default=False), download: Optional[bool] = Query(default=False)): medialofis = db.query(MediaLofi).all() try: token = request.cookies.get("access_token") _, param = get_authorization_scheme_param(token) # scheme will hold "Bearer" and param will hold actual token value current_user: Profile = get_current_user_from_token(token=param) request.params.get("review") return templates.TemplateResponse("media/lofi_list.html", { "request": request, "msg": msg, "user": current_user, "version": Settings.PROJECT_VERSION, "review": review, "download": download, "medialofis": medialofis, }) except Exception as e: print(e) return templates.TemplateResponse("media/lofi_list.html", {"request": request, "msg": msg, "user": None, "medialofis": medialofis}) @router.get("/lofis/{lofi_id}") def lofi_details(lofi_id: str, request: Request, db: SessionDep): medialofi = db.get(MediaLofi, lofi_id) return templates.TemplateResponse("media/lofi_detail.html", {"request": request, "medialofi":medialofi}) @router.get("/lofis/add") def add_lofi_link(request: Request, db: SessionDep): return templates.TemplateResponse("media/add_lofi_link.html", {"request": request}) @router.post("/lofis/add") async def post_lofi_link(request: Request, db: SessionDep): form = AddLinkForm(request) await form.load_data() if form.is_valid(): try: #video = AddLink(**form.__dict__) medialofi = create_new_lofi(url=str(form.url), db=db) return responses.RedirectResponse(f"media/lofi/{medialofi.id}", status_code=status.HTTP_302_FOUND) except Exception as e: print(e) form.__dict__.get("errors").append("Link already added") return templates.TemplateResponse("media/add_lofi_link.html", form.__dict__) return templates.TemplateResponse("media/add_lofi_link.html", form.__dict__)