mirror of
https://github.com/elisiariocouto/leggen.git
synced 2025-12-13 17:12:15 +00:00
- Extract currency from balances and populate account currency field
- Add PUT /api/v1/accounts/{account_id} endpoint for updating account names
- Add AccountUpdate Pydantic model for request validation
- Modify sync service to enrich account details with balance currency
This resolves the issue where account currency and name fields were NULL
by extracting currency from GoCardless balance data and providing an API
endpoint for manual account name updates.
78 lines
1.9 KiB
Python
78 lines
1.9 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 AccountUpdate(BaseModel):
|
|
"""Account update model"""
|
|
|
|
name: Optional[str] = None
|
|
|
|
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()}
|