application.queries.transaction_queries¶
src.application.queries.transaction_queries
¶
Transaction queries for CQRS read operations.
Queries represent requests for transaction data. They are immutable dataclasses with question-like names that describe what information is being requested.
All transaction queries are account-scoped (multi-tenancy boundary) and include user_id for ownership verification via Account->ProviderConnection chain.
Architecture: - Queries are immutable (frozen dataclasses) - NO business logic in queries (just data transfer) - Handlers perform actual data retrieval and business rules - NO domain events (queries are side-effect free)
Reference
- docs/architecture/cqrs-pattern.md
Classes¶
GetTransaction
dataclass
¶
Query to retrieve a single transaction by ID.
Requires ownership verification: Transaction->Account->ProviderConnection->User
Attributes:
| Name | Type | Description |
|---|---|---|
transaction_id |
UUID
|
Transaction unique identifier. |
user_id |
UUID
|
User requesting the transaction (for ownership check). |
Example
query = GetTransaction( ... transaction_id=transaction_id, ... user_id=current_user_id, ... ) result = await handler.handle(query)
Source code in src/application/queries/transaction_queries.py
ListTransactionsByAccount
dataclass
¶
Query to list transactions for a specific account.
Returns transactions ordered by transaction_date DESC (most recent first). Supports pagination and optional type filtering.
Attributes:
| Name | Type | Description |
|---|---|---|
account_id |
UUID
|
Account to retrieve transactions for. |
user_id |
UUID
|
User requesting transactions (for ownership check). |
limit |
int
|
Maximum number of transactions to return (default 50). |
offset |
int
|
Number of transactions to skip for pagination (default 0). |
transaction_type |
str | None
|
Optional filter by transaction type (e.g., "trade", "transfer"). |
Example
Get first page of all transactions¶
query = ListTransactionsByAccount( ... account_id=account_id, ... user_id=current_user_id, ... limit=50, ... offset=0, ... )
Get only trades¶
trades_query = ListTransactionsByAccount( ... account_id=account_id, ... user_id=current_user_id, ... transaction_type="trade", ... )
Source code in src/application/queries/transaction_queries.py
ListTransactionsByDateRange
dataclass
¶
Query to list transactions within a date range.
Queries by transaction_date (not created_at). Returns transactions ordered by transaction_date ASC (chronological).
Useful for financial reports, tax documents, and historical analysis.
Attributes:
| Name | Type | Description |
|---|---|---|
account_id |
UUID
|
Account to retrieve transactions for. |
user_id |
UUID
|
User requesting transactions (for ownership check). |
start_date |
date
|
Start of date range (inclusive). |
end_date |
date
|
End of date range (inclusive). |
Example
Get all transactions for 2024¶
query = ListTransactionsByDateRange( ... account_id=account_id, ... user_id=current_user_id, ... start_date=date(2024, 1, 1), ... end_date=date(2024, 12, 31), ... )
Source code in src/application/queries/transaction_queries.py
ListSecurityTransactions
dataclass
¶
Query to list all transactions for a specific security/symbol.
Returns TRADE transactions only (filters by symbol field). Ordered by transaction_date DESC (most recent first).
Useful for cost basis calculation, P&L analysis, and trade history.
Attributes:
| Name | Type | Description |
|---|---|---|
account_id |
UUID
|
Account to retrieve transactions for. |
user_id |
UUID
|
User requesting transactions (for ownership check). |
symbol |
str
|
Security ticker symbol (e.g., "AAPL", "TSLA", "BTC-USD"). |
limit |
int
|
Maximum number of transactions to return (default 50). |
Example
Get all AAPL trades¶
query = ListSecurityTransactions( ... account_id=account_id, ... user_id=current_user_id, ... symbol="AAPL", ... limit=100, ... )