47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
import uuid
|
|
from typing import List, Optional
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from src.core.log_conf import logger
|
|
from src.db.models.comic import Artist
|
|
from src.schema.comics.artist import AddArtist
|
|
from src.schema.comics.artist_details import ArtistDetailResponse, ArtistWorktypeComicResponse, ArtistWorktypeIssueResponse
|
|
from src.schema.comics.comic import ComicResponse
|
|
from src.schema.comics.worktype import WorktypeResponse
|
|
|
|
|
|
def get_artist_details(artist: Artist) -> ArtistDetailResponse:
|
|
comic_works: List[ArtistWorktypeComicResponse] = []
|
|
comic_works_map = {}
|
|
for work in artist.comic_works:
|
|
worktype_id = work.work_type.id
|
|
if worktype_id in comic_works_map:
|
|
comic = ComicResponse(id=work.comic.id, title=work.comic.title, completed=work.comic.completed)
|
|
comic_works_map[worktype_id].comics.append(comic)
|
|
else:
|
|
comic_works_map[worktype_id] = ArtistWorktypeComicResponse(
|
|
worktype=WorktypeResponse(id=worktype_id, name=work.work_type.name),
|
|
comics=[ComicResponse(id=work.comic.id, title=work.comic.title, completed=work.comic.completed)]
|
|
)
|
|
for value in comic_works_map.values():
|
|
comic_works.append(value)
|
|
issue_works: List[ArtistWorktypeIssueResponse] = []
|
|
response = ArtistDetailResponse(
|
|
id=artist.id,
|
|
name=str(artist.name),
|
|
weblink=str(artist.weblink),
|
|
comic_works=comic_works,
|
|
issue_works=issue_works,
|
|
)
|
|
return response
|
|
|
|
def update_artist(add_artist: AddArtist, artist_id: str, db: Session) -> Artist:
|
|
logger.info("update artist")
|
|
artist: Optional[Artist] = db.get(Artist, artist_id)
|
|
artist.name = add_artist.name
|
|
db.add(artist)
|
|
db.commit()
|
|
db.refresh(artist)
|
|
return artist
|