from fastapi import APIRouter, Request from fastapi.templating import Jinja2Templates from src.apis.utils import SessionDep from src.db.models.comic import Comic, Artist, Publisher, Issue from typing import AnyStr templates = Jinja2Templates(directory="src/templates") router = APIRouter(include_in_schema=False, prefix="/comic") @router.get("/comics") def get_comics(db: SessionDep, request: Request, msg: str = None): comics = db.query(Comic).all() return templates.TemplateResponse("comic/comics.html", {"request": request, "msg": msg, "comics": comics}) @router.get("/comics/{comic_id}") def comic_details(comic_id: AnyStr, request: Request, db: SessionDep): comic = db.get(Comic, comic_id) return templates.TemplateResponse("comic/comic_detail.html", {"request": request, "comic":comic}) @router.get("/artists") def get_artists(db: SessionDep, request: Request, msg: str = None): artists = db.query(Artist).all() return templates.TemplateResponse("comic/artists.html", {"request": request, "msg": msg, "artists": artists}) @router.get("/artists/{artist_id}") def artist_detail(artist_id: AnyStr, request: Request, db: SessionDep): artist = db.get(Artist, str(artist_id)) return templates.TemplateResponse("comic/artist_detail.html", {"request": request, "artist": artist}) @router.get("/publishers") def get_publishers(db: SessionDep, request: Request, msg: str = None): publishers = db.query(Publisher).all() return templates.TemplateResponse("comic/publishers.html", {"request": request, "publishers": publishers}) @router.get("/publishers/{publisher_id}") def publisher_details(publisher_id: AnyStr, request: Request, db: SessionDep, msg: str = None): publisher = db.get(Publisher, publisher_id) if publisher is None: msg = "Could not find Publisher" return templates.TemplateResponse("comic/publisher_detail.html", {"request": request, "msg": msg, "publisher": publisher}) @router.get("/issues") def get_issues(db: SessionDep, request: Request, msg: str = None): issues = db.query(Issue).all() return templates.TemplateResponse("comic/issues.html", {"request": request, "msg": msg, "issues": issues}) @router.get("/issues/{issue_id}") def issue_details(issue_id: AnyStr, request: Request, db: SessionDep): issue = db.get(Issue, issue_id) return templates.TemplateResponse("comic/issue_detail.html", {"request": request, "issue": issue})