diff --git a/kontor-api/src/db/models/comic.py b/kontor-api/src/db/models/comic.py index 347301a..678e9c0 100644 --- a/kontor-api/src/db/models/comic.py +++ b/kontor-api/src/db/models/comic.py @@ -161,6 +161,17 @@ class WorkType(Base, BaseMixin): works[comic] = [artist] return works + def get_artists(self) -> Dict[str, List[str]]: + works: Dict[str, List[str]] = {} + for work in self.comic_works: + comic = work.comic.title + artist = work.artist + if comic in works: + works[comic].append(artist) + else: + works[comic] = [artist] + return works + def __repr__(self): return f'Worktype({self.id} {self.version} {self.name} {len(self.comic_works)})' diff --git a/kontor-api/src/db/repository/comic.py b/kontor-api/src/db/repository/comic.py index a8774c5..53f3a12 100644 --- a/kontor-api/src/db/repository/comic.py +++ b/kontor-api/src/db/repository/comic.py @@ -1,10 +1,13 @@ +import uuid +from datetime import datetime from typing import List, Type from sqlalchemy.orm import Session -from src.db.models.comic import Artist, Comic, Issue +from src.db.models.comic import Artist, Comic, Issue, WorkType from src.schema.comics.artist import ArtistDetailResponse from src.schema.comics.issue import IssueDetailsResponse +from src.webapps.comic.forms import AddWorktypeForm def get_artist_details(artist: Artist) -> ArtistDetailResponse: @@ -38,3 +41,15 @@ def get_issue_details(issue: Issue) -> IssueDetailsResponse: volume_id=issue.volume_id ) return response + +def create_new_worktype(work: AddWorktypeForm, db: Session) -> WorkType: + worktype = WorkType() + worktype.id = str(uuid.uuid4()) + worktype.created_date = datetime.now() + worktype.last_modified_date = datetime.now() + worktype.name = work.worktype + db.add(worktype) + db.commit() + db.refresh(worktype) + print(worktype) + return worktype diff --git a/kontor-api/src/db/repository/media.py b/kontor-api/src/db/repository/media.py index bfde24f..9221c88 100644 --- a/kontor-api/src/db/repository/media.py +++ b/kontor-api/src/db/repository/media.py @@ -1,9 +1,21 @@ from sqlalchemy.orm import Session - +import uuid +from datetime import datetime from src.db.models.media import MediaVideo from src.webapps.media.forms import AddLinkForm def create_new_video(video: AddLinkForm, db: Session) -> MediaVideo: print(video.url) - return MediaVideo() + media_video = MediaVideo() + media_video.id = str(uuid.uuid4()) + media_video.url = video.url + media_video.created_date = datetime.now() + media_video.last_modified_date = datetime.now() + media_video.review = True + media_video.should_download = True + db.add(media_video) + db.commit() + db.refresh(media_video) + print(media_video) + return media_video diff --git a/kontor-api/src/templates/comic/add_worktype.html b/kontor-api/src/templates/comic/add_worktype.html new file mode 100644 index 0000000..0055747 --- /dev/null +++ b/kontor-api/src/templates/comic/add_worktype.html @@ -0,0 +1,28 @@ +{% extends "shared/base.html" %} + + +{% block title %} + Add a Video Link +{% endblock %} + +{% block content %} +
+
+
+ {% for error in errors %} +
  • {{error}}
  • + {% endfor %} +
    +
    + +
    +

    Add a WorkType

    +
    +
    + +
    + +
    +
    +
    +{% endblock %} diff --git a/kontor-api/src/webapps/base.py b/kontor-api/src/webapps/base.py index ae1ad1a..736887d 100644 --- a/kontor-api/src/webapps/base.py +++ b/kontor-api/src/webapps/base.py @@ -1,6 +1,7 @@ from fastapi import APIRouter, Request 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, route_worktype, route_artists diff --git a/kontor-api/src/webapps/comic/forms.py b/kontor-api/src/webapps/comic/forms.py new file mode 100644 index 0000000..d213894 --- /dev/null +++ b/kontor-api/src/webapps/comic/forms.py @@ -0,0 +1,20 @@ +from fastapi import Request +from typing import List, Optional + + +class AddWorktypeForm: + def __init__(self, request: Request): + self.request = request + self.errors: List = [] + self.worktype: Optional[str] = None + + async def load_data(self): + form = await self.request.form() + self.worktype = form.get("worktype") + + def is_valid(self): + if not self.worktype or (len(self.worktype) == 0): + self.errors.append("WorkType cannot be empty") + if not self.errors: + return True + return False diff --git a/kontor-api/src/webapps/comic/route_comics.py b/kontor-api/src/webapps/comic/route_comics.py index 14098af..196bbdc 100644 --- a/kontor-api/src/webapps/comic/route_comics.py +++ b/kontor-api/src/webapps/comic/route_comics.py @@ -10,6 +10,10 @@ from src.db.repository.comics.comic import update_comic from src.schema.comics.comic import ComicSchema from src.webapps.comic.forms.comic import ValidateComicForm +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=True, prefix="/comic")