add testing to fastapi

This commit is contained in:
Thomas Peetz
2025-04-17 02:21:14 +02:00
parent 4a61d6a727
commit a6eeea6c1f
11 changed files with 156 additions and 14 deletions
+37 -9
View File
@@ -1,11 +1,11 @@
from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException
from typing import List
from fastapi import APIRouter, HTTPException, status
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.models.comic import ComicResponse
from app.schema import Comic, get_db, SessionDep
from app.models.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details
from app.models.comics.artist import ArtistCreation, ArtistDetailResponse, ArtistResponse, get_artist_details
from app.schema import Comic, SessionDep, Artist
router = APIRouter(
prefix="/comic",
@@ -22,11 +22,39 @@ def get_all_comics(db: SessionDep) -> list[ComicResponse]:
results.append(ComicResponse(id=comic.id, title=comic.title, completed=(comic.completed == 1)))
return results
@router.get("/comics/{comic_id}")
def get_comic(comic_id: UUID, db: SessionDep) -> ComicResponse:
@router.get("/comics/{comic_id}", response_model=ComicDetailsResponse)
def get_comic(comic_id: UUID, db: SessionDep) -> ComicDetailsResponse:
comic = db.get(Comic, comic_id)
if comic is None:
raise HTTPException(status_code=404, detail="Comic could not be found")
response: ComicResponse = ComicResponse(id=comic_id, title=comic.title, completed=comic.completed)
response: ComicDetailsResponse = get_comic_details(comic)
return response
@router.get("/artists", response_model=List[ArtistResponse])
def get_all_artists(db: SessionDep) -> List[ArtistResponse]:
results: List[ArtistResponse] = []
artists = db.query(Artist).all()
for artist in artists:
results.append(ArtistResponse(id=artist.id, name=artist.name))
return results
@router.get("/artists/{artist_id}", response_model=ArtistDetailResponse)
def get_artist(artist_id: UUID, db: SessionDep) -> ArtistDetailResponse:
artist = db.get(Artist, artist_id)
if artist is None:
raise HTTPException(status_code=404, detail="Artist could not be found")
response: ArtistDetailResponse = get_artist_details(artist)
return response
@router.post("/artists", status_code=status.HTTP_201_CREATED)
def add_artist(db: SessionDep, artist_creation: ArtistCreation) -> ArtistResponse:
artist: Artist = Artist()
setattr(artist, "name", artist_creation.name)
try:
db.add(artist)
db.commit()
except:
raise HTTPException(status_code=409, detail="Artist already added")
response = ArtistResponse(id=artist.id, name=artist.name)
return response