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 %}
+
+
+
+
+
+{% 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 %}
+
+{% 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 @@