Skip to content

Commit df33c13

Browse files
committed
❇️ [refactor][backend] EventEntryCreate inherits Base, generalize create CRUD
1 parent 0833ea3 commit df33c13

5 files changed

Lines changed: 15 additions & 14 deletions

File tree

backend/kayman/crud/event_entry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
from sqlmodel import Session
44

5-
from kayman.schemas.event_entry import EventEntry, EventEntryBase
5+
from kayman.schemas.event_entry import EventEntry, EventEntryBase, EventEntryCreate
66

77

88
def create_event_entries(
99
session: Session,
10-
entries: list[EventEntryBase],
10+
entries: Sequence[EventEntryCreate],
1111
commit: bool = True,
1212
) -> Sequence[EventEntryBase]:
1313
db_entries = [EventEntry.model_validate(entry) for entry in entries]

backend/kayman/schemas/api_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class EventReadDetailed(EventRead):
1414
entries: list[EventEntryRead]
1515

1616

17+
# TODO: test-only after legacy_create removal, remove once validate_total is gone
1718
class EventCreateDetailed(SQLModel):
1819
"""Includes transactions and entries."""
1920

backend/kayman/schemas/event_entry.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,8 @@ class EventEntry(EventEntryBase, table=True):
3030
currency: "Currency" = Relationship(back_populates="entries")
3131

3232

33-
class EventEntryCreate(SQLModel):
34-
category_id: int
35-
amount: Decimal
36-
quantity: int
37-
currency_code: str
38-
description: str | None = None
33+
class EventEntryCreate(EventEntryBase):
34+
pass
3935

4036

4137
class EventEntryRead(EventEntryBase):

backend/kayman/tests/crud/test_event_entry.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from sqlmodel import Session
44

55
from kayman.crud.event_entry import create_event_entries
6-
from kayman.schemas.event_entry import EventEntry, EventEntryBase
6+
from kayman.schemas.event_entry import EventEntry, EventEntryCreate
77
from kayman.tests.factories import (
88
CategoryFactory,
99
CurrencyFactory,
@@ -17,7 +17,7 @@ def test_create_event_entries(session: Session):
1717
category = CategoryFactory()
1818
currency = CurrencyFactory()
1919
entries = [
20-
EventEntryBase.model_validate(entry)
20+
EventEntryCreate.model_validate(entry)
2121
for entry in EventEntryFactory.build_batch(
2222
3,
2323
event_id=event.id,
@@ -48,7 +48,7 @@ def test_create_event_entries_no_commit(session: Session, session_2: Session):
4848
event = EventFactory()
4949
category = CategoryFactory()
5050
currency = CurrencyFactory()
51-
entry = EventEntryBase.model_validate(
51+
entry = EventEntryCreate.model_validate(
5252
EventEntryFactory.build(
5353
event_id=event.id,
5454
category_id=category.id,
@@ -79,7 +79,7 @@ def test_create_event_entries_no_commit(session: Session, session_2: Session):
7979
def test_create_event_entries_event_not_found(session: Session):
8080
category = CategoryFactory()
8181
currency = CurrencyFactory()
82-
entry = EventEntryBase.model_validate(
82+
entry = EventEntryCreate.model_validate(
8383
EventEntryFactory.build(
8484
event_id=999999,
8585
category_id=category.id,

backend/kayman/tests/factories/event.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ def build_details(cls, type=EventType.Expense, entry_num=1, transaction_num=1):
2222
from kayman.tests.factories.event_entry import EventEntryFactory
2323
from kayman.tests.factories.transaction import TransactionFactory
2424

25-
# Create entries and transactions
25+
# Create entries and transactions. event_id is a placeholder: these are
26+
# never persisted, but EventEntryCreate (validated inside
27+
# EventCreateDetailed) requires it.
2628
entries_currency = CurrencyFactory.build()
27-
entries = EventEntryFactory.build_batch(entry_num, currency=entries_currency)
29+
entries = EventEntryFactory.build_batch(
30+
entry_num, currency=entries_currency, event_id=0
31+
)
2832
transactions = TransactionFactory.build_batch(transaction_num)
2933

3034
# Calculate totals

0 commit comments

Comments
 (0)