Coverage for src/app/modules/decks/router.py: 100%
64 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-24 08:34 +0000
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-24 08:34 +0000
1import logging
3from fastapi import APIRouter, Depends, HTTPException
4from sqlalchemy.orm import Session
6from app.core.dependencies import get_deck_service
7from app.db.session import get_session
8from app.modules.decks.schemas import DeckCreate, DeckRead, DeckWithCards
10logger = logging.getLogger(__name__)
12router = APIRouter()
15@router.post("/", response_model=DeckRead)
16def create_deck(payload: DeckCreate, session: Session = Depends(get_session)): # noqa: B008
17 logger.debug("create_deck endpoint called: name_present=%s", bool(getattr(payload, "name", "")))
18 service = get_deck_service(session)
19 try:
20 deck = service.create_deck(payload.name)
21 logger.info(
22 "Deck created via endpoint: id=%s name=%s",
23 getattr(deck, "id", None),
24 getattr(deck, "name", None),
25 )
26 return deck
27 except ValueError as err:
28 logger.warning("create_deck bad request: %s", err)
29 raise HTTPException(status_code=400, detail=str(err)) from err
30 except Exception as err:
31 logger.exception("Unexpected error in create_deck")
32 raise HTTPException(status_code=500, detail="Internal server error") from err
35@router.get("/{deck_id}", response_model=DeckRead)
36def get_deck(deck_id: int, session: Session = Depends(get_session)): # noqa: B008
37 logger.debug("get_deck endpoint called: deck_id=%s", deck_id)
38 service = get_deck_service(session)
39 try:
40 deck = service.get_deck(deck_id)
41 logger.info("Deck fetched via endpoint: deck_id=%s", deck_id)
42 return deck
43 except ValueError as err:
44 logger.info("get_deck not found: deck_id=%s", deck_id)
45 raise HTTPException(status_code=404, detail=str(err)) from err
46 except Exception as err:
47 logger.exception("Unexpected error in get_deck: deck_id=%s", deck_id)
48 raise HTTPException(status_code=500, detail="Internal server error") from err
51@router.get("/{deck_id}/full", response_model=DeckWithCards)
52def get_deck_full(deck_id: int, session: Session = Depends(get_session)): # noqa: B008
53 logger.debug("get_deck_full endpoint called: deck_id=%s", deck_id)
54 service = get_deck_service(session)
55 try:
56 result = service.get_deck_with_cards(deck_id)
57 logger.info("Deck with cards returned via endpoint: deck_id=%s", deck_id)
58 return result
59 except ValueError as err:
60 logger.info("get_deck_full not found: deck_id=%s", deck_id)
61 raise HTTPException(status_code=404, detail=str(err)) from err
62 except Exception as err:
63 logger.exception("Unexpected error in get_deck_full: deck_id=%s", deck_id)
64 raise HTTPException(status_code=500, detail="Internal server error") from err
67@router.delete("/{deck_id}")
68def delete_deck(deck_id: int, session: Session = Depends(get_session)): # noqa: B008
69 logger.debug("delete_deck endpoint called: deck_id=%s", deck_id)
70 service = get_deck_service(session)
71 try:
72 result = service.delete_deck(deck_id)
73 logger.info("Deck deleted via endpoint: deck_id=%s", deck_id)
74 return result
75 except ValueError as err:
76 logger.info("delete_deck not found: deck_id=%s", deck_id)
77 raise HTTPException(status_code=404, detail=str(err)) from err
78 except Exception as err:
79 logger.exception("Unexpected error deleting deck_id=%s", deck_id)
80 raise HTTPException(status_code=500, detail="Internal server error") from err