Skip to content

Converters

domain.expense.ports.converters

Summary

Converters bridging enriched fetch-request output and Expense aggregates for MongoDB storage.

Classes

Functions

enriched_to_expenses async

1
2
3
4
5
6
7
enriched_to_expenses(
    enriched_list: List[EnrichedExpense],
    fetch_request: FetchRequest,
    entity_svc,
    tag_svc,
    fetch_request_id: Optional[str] = None,
) -> List[Expense]

Convert enriched expenses into Expense aggregates ready for storage.

Each enriched expense is expanded into an Expense referencing the account of fetch_request and resolved entity and tag objects.

Parameters:

Name Type Description Default
enriched_list List[EnrichedExpense]

Enriched expenses to convert.

required
fetch_request FetchRequest

Fetch request providing the source account.

required
entity_svc Any

Entity CRUD service used to resolve or create payees.

required
tag_svc Any

Tag CRUD service used to resolve tags by name.

required
fetch_request_id Optional[str]

Fetch request ID recorded on expenses; falls back to fetch_request.id when omitted.

None

Returns:

Type Description
List[Expense]

List[Expense]: Converted expense aggregates.

Raises:

Type Description
ValueError

When an enriched tag name does not exist.

expense_to_storage

expense_to_storage(expense: Expense) -> None

Convert Expense FK fields to ObjectIds in-place for MongoDB storage.

Raises ValueError if any FK field lacks an ObjectId — prevents storing embedded subdocuments instead of references.

Parameters:

Name Type Description Default
expense Expense

Expense to normalize for storage.

required

Raises:

Type Description
ValueError

When entity, account, or any tag lacks an ObjectId.