Coverage for src/app/modules/reviews/router.py: 100%
33 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_review_service
7from app.db.session import get_session
8from app.modules.reviews.schemas import DeckScore, ReviewCreate, ReviewRead
10logger = logging.getLogger(__name__)
12router = APIRouter()
15@router.post("/", response_model=ReviewRead)
16def create_review(payload: ReviewCreate, session: Session = Depends(get_session)): # noqa: B008
17 logger.debug(
18 "create_review endpoint called: card_id=%s rating=%s",
19 getattr(payload, "card_id", None),
20 getattr(payload, "rating", None),
21 )
22 service = get_review_service(session)
23 try:
24 review = service.create_review(payload.card_id, payload.rating)
25 logger.info(
26 "Review created via endpoint: id=%s card_id=%s rating=%s",
27 getattr(review, "id", None),
28 payload.card_id,
29 payload.rating,
30 )
31 return review
32 except ValueError as err:
33 logger.warning("create_review bad request: %s", err)
34 raise HTTPException(status_code=400, detail=str(err)) from err
35 except Exception as err:
36 logger.exception("Unexpected error in create_review")
37 raise HTTPException(status_code=500, detail="Internal server error") from err
40@router.get("/deck/{deck_id}", response_model=DeckScore)
41def get_deck_score(deck_id: int, session: Session = Depends(get_session)): # noqa: B008
42 logger.debug("get_deck_score endpoint called: deck_id=%s", deck_id)
43 service = get_review_service(session)
44 try:
45 result = service.compute_deck_score(deck_id)
46 logger.info(
47 "Deck score returned via endpoint: deck_id=%s average_score=%s review_count=%s",
48 result.get("deck_id"),
49 result.get("average_score"),
50 result.get("review_count"),
51 )
52 return result
53 except Exception as err:
54 logger.exception("Unexpected error in get_deck_score: deck_id=%s", deck_id)
55 raise HTTPException(status_code=500, detail="Internal server error") from err