Coverage for src/app/modules/decks/repository.py: 100%
53 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 sqlalchemy.orm import Session, joinedload
5from app.modules.decks.model import Deck
7logger = logging.getLogger(__name__)
10class DeckRepository:
11 def __init__(self, db: Session):
12 self.db = db
13 logger.debug("DeckRepository initialized: Session=%s", type(db))
15 def create(self, name: str) -> Deck:
16 logger.debug("create called: name=%s", name)
17 try:
18 deck = Deck(name=name)
19 self.db.add(deck)
20 self.db.commit()
21 self.db.refresh(deck)
22 logger.info("Deck created: id=%s name=%s", getattr(deck, "id", None), name)
23 return deck
24 except Exception:
25 logger.exception("Failed to create deck with name=%s", name)
26 raise
28 def get(self, deck_id: int) -> Deck | None:
29 logger.debug("get called: deck_id=%s", deck_id)
30 try:
31 deck = self.db.query(Deck).filter(Deck.id == deck_id).first()
32 except Exception:
33 logger.exception("Failed to fetch deck_id=%s", deck_id)
34 raise
36 if not deck:
37 logger.debug("get returned no result: deck_id=%s", deck_id)
38 else:
39 logger.debug("get fetched deck: deck_id=%s", deck_id)
40 return deck
42 def get_with_cards(self, deck_id: int) -> Deck | None:
43 logger.debug("get_with_cards called: deck_id=%s", deck_id)
44 try:
45 deck = (
46 self.db.query(Deck)
47 .options(joinedload(Deck.cards))
48 .filter(Deck.id == deck_id)
49 .first()
50 )
51 except Exception:
52 logger.exception("Failed to fetch deck with cards for deck_id=%s", deck_id)
53 raise
55 if not deck:
56 logger.info("Deck not found (with cards): deck_id=%s", deck_id)
57 return None
59 card_count = len(getattr(deck, "cards", []))
60 logger.info("Fetched deck with cards: deck_id=%s card_count=%s", deck_id, card_count)
61 return deck
63 def delete(self, deck: Deck):
64 logger.debug("delete called: deck_id=%s", getattr(deck, "id", None))
65 try:
66 self.db.delete(deck)
67 self.db.commit()
68 logger.info("Deleted deck: deck_id=%s", getattr(deck, "id", None))
69 except Exception:
70 logger.exception("Failed to delete deck_id=%s", getattr(deck, "id", None))
71 raise