45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from typing import List
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from src.core.log_conf import logger
|
|
from src.db.models.comic import Comic
|
|
from src.db.repository.comics.comic import (
|
|
get_comic_details,
|
|
)
|
|
from src.db.session import SessionDep
|
|
from src.schema.comics.comic import ComicResponse, comic_to_response
|
|
from src.schema.comics.comic_details import ComicDetailsResponse
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/comics")
|
|
def get_all_comics(db: SessionDep) -> List[ComicResponse]:
|
|
results: List[ComicResponse] = []
|
|
comics = db.query(Comic).all()
|
|
for comic in comics:
|
|
response = comic_to_response(comic)
|
|
results.append(response)
|
|
return results
|
|
|
|
|
|
@router.get("/comics/{comic_id}", response_model=ComicResponse)
|
|
def get_comic(comic_id: str, db: SessionDep) -> ComicResponse:
|
|
comic = db.get(Comic, comic_id)
|
|
if comic is None:
|
|
raise HTTPException(status_code=404, detail="Comic could not be found")
|
|
response: ComicResponse = comic_to_response(comic)
|
|
return response
|
|
|
|
|
|
@router.get("/comics/details/{comic_id}", response_model=ComicDetailsResponse)
|
|
def get_comic_details_by_id(comic_id: str, db: SessionDep) -> ComicDetailsResponse:
|
|
comic = db.get(Comic, comic_id)
|
|
if comic is None:
|
|
raise HTTPException(status_code=404, detail="Comic could not be found")
|
|
logger.info(f"create ComicDetailsResponse for {comic}")
|
|
response: ComicDetailsResponse = get_comic_details(comic)
|
|
logger.info(f"ComicDetailsResponse: {response}")
|
|
return response
|