Skip to content

Commit 7553ee1

Browse files
authored
fix: require deck_id on Card response schema (#69)
1 parent e99d3a7 commit 7553ee1

5 files changed

Lines changed: 17 additions & 6 deletions

File tree

‎app/api/cards.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async def create_cards(
3333
@litestar.put("/decks/{deck_id:int}/cards/")
3434
async def update_cards(
3535
deck_id: FromPath[int],
36-
data: list[schemas.Card],
36+
data: list[schemas.CardUpdate],
3737
update_cards_use_case: NamedDependency[UpdateCardsUseCase],
3838
) -> schemas.Cards:
3939
return schemas.Cards.from_models(await update_cards_use_case(deck_id=deck_id, data=data))

‎app/repositories.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ async def list_for_deck(self, deck_id: int) -> Sequence[models.Card]:
4949
async def add_cards(self, deck_id: int, cards: list[schemas.CardCreate]) -> Sequence[models.Card]:
5050
return await self.create_many([models.Card(**card.model_dump(), deck_id=deck_id) for card in cards])
5151

52-
async def upsert_cards(self, deck_id: int, cards: list[schemas.Card]) -> Sequence[models.Card]:
52+
async def upsert_cards(self, deck_id: int, cards: list[schemas.CardUpdate]) -> Sequence[models.Card]:
5353
upserted = await self.upsert_many(
54-
[models.Card(**card.model_dump(exclude={"deck_id"}), deck_id=deck_id) for card in cards],
54+
[models.Card(**card.model_dump(), deck_id=deck_id) for card in cards],
5555
)
5656
return sorted(upserted, key=operator.attrgetter("id"))

‎app/schemas.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ class CardCreate(CardBase):
3131
pass
3232

3333

34-
class Card(CardBase):
34+
class CardUpdate(CardBase):
3535
id: PositiveInt
36-
deck_id: PositiveInt | None = None
36+
37+
38+
class Card(CardUpdate):
39+
deck_id: PositiveInt
3740

3841

3942
class Cards(Collection[Card]):

‎app/use_cases/update_cards.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class UpdateCardsUseCase:
1414
cards_repository: CardsRepository
1515

1616
@postgres_retry
17-
async def __call__(self, *, deck_id: int, data: list[schemas.Card]) -> Sequence[models.Card]:
17+
async def __call__(self, *, deck_id: int, data: list[schemas.CardUpdate]) -> Sequence[models.Card]:
1818
async with self.transaction:
1919
cards: typing.Final = await self.cards_repository.upsert_cards(deck_id, data)
2020
await self.transaction.commit()

‎tests/test_cards.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,11 @@ async def test_cards_ordered_by_id_after_update(client: AsyncClient) -> None:
135135
response = await client.get(f"/api/decks/{deck.id}/cards/")
136136
assert response.status_code == status_codes.HTTP_200_OK
137137
assert [x["id"] for x in response.json()["items"]] == [card1.id, card2.id]
138+
139+
140+
async def test_openapi_card_deck_id_required(client: AsyncClient) -> None:
141+
response = await client.get("/docs/openapi.json")
142+
assert response.status_code == status_codes.HTTP_200_OK
143+
card_schema = response.json()["components"]["schemas"]["Card"]
144+
assert "deck_id" in card_schema["required"]
145+
assert card_schema["properties"]["deck_id"]["type"] == "integer"

0 commit comments

Comments
 (0)