diff --git a/kontor-api/src/db/models/comic.py b/kontor-api/src/db/models/comic.py index 7162d84..e9432fe 100644 --- a/kontor-api/src/db/models/comic.py +++ b/kontor-api/src/db/models/comic.py @@ -110,6 +110,17 @@ class WorkType(Base, BaseMixin): name = Column(String, nullable=False, unique=True) comic_works = relationship("ComicWork") + 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/models/media.py b/kontor-api/src/db/models/media.py index a0ccd32..975fef9 100644 --- a/kontor-api/src/db/models/media.py +++ b/kontor-api/src/db/models/media.py @@ -98,3 +98,14 @@ class MediaVideo(Base, BaseMixin): title = Column(String) url = Column(String, unique=True) should_download = Column(Boolean) + + def __repr__(self): + return f'MediaFile({self.id} {self.title} {self.url})' + + def __str__(self): + if self.title is None: + return f'{self.url}({self.id})' + else: + return f'{self.title}({self.id})' + + 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/schema/comics/worktype.py b/kontor-api/src/schema/comics/worktype.py new file mode 100644 index 0000000..9efccd1 --- /dev/null +++ b/kontor-api/src/schema/comics/worktype.py @@ -0,0 +1,4 @@ +from pydantic import BaseModel + +class AddWorkType(BaseModel): + worktype: str 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/templates/comic/worktype_detail.html b/kontor-api/src/templates/comic/worktype_detail.html new file mode 100644 index 0000000..ac734a3 --- /dev/null +++ b/kontor-api/src/templates/comic/worktype_detail.html @@ -0,0 +1,49 @@ +{% extends "shared/base.html" %} + + +{% block title %} + WorkType Detail +{% endblock %} + +{% block content %} +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    WorkType Name{{worktype.name}}
    Works + {% for comic in worktype.get_artists() %} +

    + {{comic}}: +

      + {% for artist in worktype.get_artists()[comic] %} +
    • {{artist.name}}
    • + {% endfor %} +
    +

    + {% endfor %} +
    Data Created{{worktype.created_date}}
    Data Modified{{worktype.last_modified_date}}
    Data Version{{worktype.version}}
    +
    +
    +{% endblock %} diff --git a/kontor-api/src/templates/comic/worktypes.html b/kontor-api/src/templates/comic/worktypes.html new file mode 100644 index 0000000..19a43fb --- /dev/null +++ b/kontor-api/src/templates/comic/worktypes.html @@ -0,0 +1,26 @@ +{% extends "shared/base.html" %} + +{% block title %} + WorkTypes +{% endblock %} + +{% block content %} + {% with msg=msg %} + {% include "components/alerts.html" %} + {% endwith %} +
    + + + + + + {% for worktype in worktypes %} + + + + {% endfor %} + +
    Name
    {{worktype.name}}
    + Add WorkType +
    +{% endblock %} diff --git a/kontor-api/src/templates/components/navbar.html b/kontor-api/src/templates/components/navbar.html index 44f3c90..f4cb733 100644 --- a/kontor-api/src/templates/components/navbar.html +++ b/kontor-api/src/templates/components/navbar.html @@ -1,8 +1,6 @@