mirror of
https://github.com/elisiariocouto/leggen.git
synced 2025-12-13 11:22:21 +00:00
- Update Transaction interface to include stable transaction_id field - Modify TransactionsList to use stable transaction_id for React keys - Update API models to handle new transactionId field from database - Fix API routes to properly map transaction_id in responses - Update test mocks to include transactionId field - Ensure backward compatibility with internal_transaction_id This adapts the frontend to work with the new composite primary key (accountId, transactionId) structure that prevents duplicate transactions.
69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
from datetime import datetime
|
|
from typing import List, Optional, Dict, Any
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class AccountBalance(BaseModel):
|
|
"""Account balance model"""
|
|
|
|
amount: float
|
|
currency: str
|
|
balance_type: str
|
|
last_change_date: Optional[datetime] = None
|
|
|
|
class Config:
|
|
json_encoders = {datetime: lambda v: v.isoformat() if v else None}
|
|
|
|
|
|
class AccountDetails(BaseModel):
|
|
"""Account details model"""
|
|
|
|
id: str
|
|
institution_id: str
|
|
status: str
|
|
iban: Optional[str] = None
|
|
name: Optional[str] = None
|
|
currency: Optional[str] = None
|
|
created: datetime
|
|
last_accessed: Optional[datetime] = None
|
|
balances: List[AccountBalance] = []
|
|
|
|
class Config:
|
|
json_encoders = {datetime: lambda v: v.isoformat() if v else None}
|
|
|
|
|
|
class Transaction(BaseModel):
|
|
"""Transaction model"""
|
|
|
|
transaction_id: str # NEW: stable bank-provided transaction ID
|
|
internal_transaction_id: Optional[str] = None # OLD: unstable GoCardless ID
|
|
institution_id: str
|
|
iban: Optional[str] = None
|
|
account_id: str
|
|
transaction_date: datetime
|
|
description: str
|
|
transaction_value: float
|
|
transaction_currency: str
|
|
transaction_status: str # "booked" or "pending"
|
|
raw_transaction: Dict[str, Any]
|
|
|
|
class Config:
|
|
json_encoders = {datetime: lambda v: v.isoformat()}
|
|
|
|
|
|
class TransactionSummary(BaseModel):
|
|
"""Transaction summary for lists"""
|
|
|
|
transaction_id: str # NEW: stable bank-provided transaction ID
|
|
internal_transaction_id: Optional[str] = None
|
|
date: datetime
|
|
description: str
|
|
amount: float
|
|
currency: str
|
|
status: str
|
|
account_id: str
|
|
|
|
class Config:
|
|
json_encoders = {datetime: lambda v: v.isoformat()}
|