From 546f8ebbdf3089e5ce252b85231826082b993887 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Tue, 20 May 2025 14:06:13 +0200 Subject: [PATCH] separate modules for worktype endpoints --- .../src/templates/comic/publisher_detail.html | 7 ++ kontor-api/src/webapps/base.py | 5 +- kontor-api/src/webapps/comic/route_comics.py | 65 +---------------- .../src/webapps/comic/route_worktype.py | 73 +++++++++++++++++++ 4 files changed, 87 insertions(+), 63 deletions(-) create mode 100644 kontor-api/src/webapps/comic/route_worktype.py diff --git a/kontor-api/src/templates/comic/publisher_detail.html b/kontor-api/src/templates/comic/publisher_detail.html index d9fc233..16f0ab9 100644 --- a/kontor-api/src/templates/comic/publisher_detail.html +++ b/kontor-api/src/templates/comic/publisher_detail.html @@ -59,5 +59,12 @@ +
+
+ Back to list + Edit + Delete +
+
{% endblock %} diff --git a/kontor-api/src/webapps/base.py b/kontor-api/src/webapps/base.py index 29ebfb8..7c71e8b 100644 --- a/kontor-api/src/webapps/base.py +++ b/kontor-api/src/webapps/base.py @@ -4,18 +4,19 @@ from fastapi.templating import Jinja2Templates from src.core.config import settings from src.webapps.admin import route_admin from src.webapps.auth import route_login -from src.webapps.comic import route_comics +from src.webapps.comic import route_comics, route_worktype from src.webapps.media import route_media, route_videos templates = Jinja2Templates(directory="src/templates") api_router = APIRouter() api_router.include_router(route_comics.router) +api_router.include_router(route_worktype.router) api_router.include_router(route_media.router) api_router.include_router(route_videos.router) api_router.include_router(route_login.router) api_router.include_router(route_admin.router) @api_router.get("/") -def home(request: Request, msg: str = None): +def home(request: Request, msg: str | None = None): return templates.TemplateResponse("index.html", {"request": request, "msg": msg}) diff --git a/kontor-api/src/webapps/comic/route_comics.py b/kontor-api/src/webapps/comic/route_comics.py index 94f8f2a..ea6b03d 100644 --- a/kontor-api/src/webapps/comic/route_comics.py +++ b/kontor-api/src/webapps/comic/route_comics.py @@ -15,7 +15,7 @@ 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): +def get_comics(db: SessionDep, request: Request, msg: str | None = None): comics = db.query(Comic).all() return templates.TemplateResponse("comic/comics.html", {"request": request, "msg": msg, "comics": comics}) @@ -25,7 +25,7 @@ def comic_details(comic_id: AnyStr, request: Request, db: SessionDep): return templates.TemplateResponse("comic/comic_detail.html", {"request": request, "comic":comic}) @router.get("/artists") -def get_artists(db: SessionDep, request: Request, msg: str = None): +def get_artists(db: SessionDep, request: Request, msg: str | None = None): artists = db.query(Artist).all() return templates.TemplateResponse("comic/artists.html", {"request": request, "msg": msg, "artists": artists}) @@ -35,7 +35,7 @@ def artist_detail(artist_id: AnyStr, request: Request, db: SessionDep): return templates.TemplateResponse("comic/artist_detail.html", {"request": request, "artist": artist}) @router.get("/publishers") -def get_publishers(db: SessionDep, request: Request, msg: str = None): +def get_publishers(db: SessionDep, request: Request, msg: str | None = None): publishers = db.query(Publisher).all() return templates.TemplateResponse("comic/publishers.html", {"request": request, "publishers": publishers}) @@ -47,7 +47,7 @@ def publisher_details(publisher_id: AnyStr, request: Request, db: SessionDep, ms 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): +def get_issues(db: SessionDep, request: Request, msg: str | None = None): issues = db.query(Issue).all() return templates.TemplateResponse("comic/issues.html", {"request": request, "msg": msg, "issues": issues}) @@ -56,60 +56,3 @@ 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(db: SessionDep, request: Request, worktype_id: AnyStr): - worktype = db.get(WorkType, worktype_id) - return templates.TemplateResponse("comic/worktype_detail.html", {"request": request, "worktype": worktype}) - -@router.get("/worktype/add") -def add_worktype(request: Request, db: SessionDep): - return templates.TemplateResponse("comic/worktype_edit.html", {"request": request}) - -@router.post("/worktype/add") -async def add_worktype(db: SessionDep, request: Request): - form = AddWorktypeForm(request) - await form.load_data() - if form.is_valid(): - try: - work = AddWorkType(**form.__dict__) - worktype = create_new_worktype(work=work, db=db) - logger.info(f"add_worktype: redirect to /comic/worktypes/{worktype.id}") - return RedirectResponse(f"/comic/worktypes/{worktype.id}", status_code=status.HTTP_303_SEE_OTHER) - except Exception as e: - print(e) - form.__dict__.get("errors").append("worktype already added") - return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) - print("form is not valid") - return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) - -@router.get("/worktype/edit/{worktype_id}") -def edit_worktype(db: SessionDep, request: Request, worktype_id: str): - worktype = db.get(WorkType, worktype_id) - return templates.TemplateResponse("comic/worktype_edit.html", {"request": request, "worktype": worktype.name}) - -@router.post("/worktype/edit/{worktype_id}") -async def edit_worktype(request: Request, db: SessionDep, worktype_id: str): - form = AddWorktypeForm(request) - await form.load_data() - if form.is_valid(): - try: - work = AddWorkType(**form.__dict__) - worktype = update_worktype(work=work, worktype_id=worktype_id, db=db) - return RedirectResponse(f"/comic/worktypes/{worktype.id}", status_code=status.HTTP_303_SEE_OTHER) - except Exception as e: - print(e) - form.__dict__.get("errors").append("worktype already added") - return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) - return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) - -@router.get("/worktype/delete/{worktype_id}") -async def delete_worktype(db: SessionDep, request: Request, worktype_id: str): - worktype = db.get(WorkType, worktype_id) - db.delete(worktype) - db.commit() - return RedirectResponse("/comic/worktypes", status_code=status.HTTP_303_SEE_OTHER) diff --git a/kontor-api/src/webapps/comic/route_worktype.py b/kontor-api/src/webapps/comic/route_worktype.py new file mode 100644 index 0000000..59ddb4d --- /dev/null +++ b/kontor-api/src/webapps/comic/route_worktype.py @@ -0,0 +1,73 @@ +from fastapi import APIRouter, Request, responses, status +from fastapi.templating import Jinja2Templates +from fastapi.responses import RedirectResponse + +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, update_worktype +from src.main import logger +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("/worktypes") +def get_worktypes(db: SessionDep, request: Request, msg: str | None = 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(db: SessionDep, request: Request, worktype_id: AnyStr): + worktype = db.get(WorkType, worktype_id) + return templates.TemplateResponse("comic/worktype_detail.html", {"request": request, "worktype": worktype}) + +@router.get("/worktype/add") +def add_worktype(request: Request, db: SessionDep): + return templates.TemplateResponse("comic/worktype_edit.html", {"request": request}) + +@router.post("/worktype/add") +async def add_worktype(db: SessionDep, request: Request): + form = AddWorktypeForm(request) + await form.load_data() + if form.is_valid(): + try: + work = AddWorkType(**form.__dict__) + worktype = create_new_worktype(work=work, db=db) + logger.info(f"add_worktype: redirect to /comic/worktypes/{worktype.id}") + return RedirectResponse(f"/comic/worktypes/{worktype.id}", status_code=status.HTTP_303_SEE_OTHER) + except Exception as e: + print(e) + form.__dict__.get("errors").append("worktype already added") + return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) + print("form is not valid") + return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) + +@router.get("/worktype/edit/{worktype_id}") +def edit_worktype(db: SessionDep, request: Request, worktype_id: str): + worktype = db.get(WorkType, worktype_id) + return templates.TemplateResponse("comic/worktype_edit.html", {"request": request, "worktype": worktype.name}) + +@router.post("/worktype/edit/{worktype_id}") +async def edit_worktype(request: Request, db: SessionDep, worktype_id: str): + form = AddWorktypeForm(request) + await form.load_data() + if form.is_valid(): + try: + work = AddWorkType(**form.__dict__) + worktype = update_worktype(work=work, worktype_id=worktype_id, db=db) + return RedirectResponse(f"/comic/worktypes/{worktype.id}", status_code=status.HTTP_303_SEE_OTHER) + except Exception as e: + print(e) + form.__dict__.get("errors").append("worktype already added") + return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) + return templates.TemplateResponse("comic/worktype_edit.html", form.__dict__) + +@router.get("/worktype/delete/{worktype_id}") +async def delete_worktype(db: SessionDep, request: Request, worktype_id: str): + worktype = db.get(WorkType, worktype_id) + db.delete(worktype) + db.commit() + return RedirectResponse("/comic/worktypes", status_code=status.HTTP_303_SEE_OTHER)