85 lines
3.9 KiB
Python
85 lines
3.9 KiB
Python
from fastapi import APIRouter, Request, responses, status
|
|
from fastapi.templating import Jinja2Templates
|
|
from src.apis.utils import SessionDep
|
|
from src.db.models.comic import Comic, Artist, Publisher, Issue, WorkType
|
|
from typing import AnyStr
|
|
|
|
from src.db.repository.comic import create_new_worktype
|
|
from src.schema.comics.worktype import AddWorkType
|
|
from src.webapps.comic.forms import AddWorktypeForm
|
|
|
|
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})
|
|
|
|
@router.get("/worktypes")
|
|
def get_worktypes(db: SessionDep, request: Request, msg: str = None):
|
|
worktypes = db.query(WorkType).all()
|
|
return templates.TemplateResponse("comic/worktypes.html", {"request": request, "msg": msg, "worktypes": worktypes})
|
|
|
|
@router.get("/worktypes/{worktype_id}")
|
|
def worktype_detail(worktype_id: AnyStr, request: Request, db: SessionDep):
|
|
worktype = db.get(WorkType, worktype_id)
|
|
return templates.TemplateResponse("comic/worktype_detail.html", {"request": request, "worktype": worktype})
|
|
|
|
@router.get("/add-worktype")
|
|
def add_worktype(request: Request, db: SessionDep):
|
|
return templates.TemplateResponse("comic/add_worktype.html", {"request": request})
|
|
|
|
@router.post("/add-worktype")
|
|
async def post_worktype(request: Request, db: SessionDep):
|
|
form = AddWorktypeForm(request)
|
|
await form.load_data()
|
|
if form.is_valid():
|
|
try:
|
|
work = AddWorkType(**form.__dict__)
|
|
worktype = create_new_worktype(work=work, db=db)
|
|
return responses.RedirectResponse(f"/comic/worktypes/{worktype.id}", status_code=status.HTTP_302_FOUND)
|
|
except Exception as e:
|
|
print(e)
|
|
form.__dict__.get("errors").append("worktype already added")
|
|
return templates.TemplateResponse("comic/add_worktype.html", form.__dict__)
|
|
return templates.TemplateResponse("comic/add_worktype.html", form.__dict__)
|
|
|