feat(frontend): adapt to composite key transaction structure

- 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.
This commit is contained in:
Elisiário Couto
2025-09-10 21:11:26 +01:00
parent 13e92ccd34
commit 61fafecb78
6 changed files with 24 additions and 15 deletions

View File

@@ -36,7 +36,8 @@ class AccountDetails(BaseModel):
class Transaction(BaseModel):
"""Transaction model"""
internal_transaction_id: Optional[str] = None
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
@@ -54,6 +55,7 @@ class Transaction(BaseModel):
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

View File

@@ -243,7 +243,8 @@ async def get_account_transactions(
# Return simplified transaction summaries
data = [
TransactionSummary(
internal_transaction_id=txn["internalTransactionId"],
transaction_id=txn["transactionId"], # NEW: stable bank-provided ID
internal_transaction_id=txn.get("internalTransactionId"),
date=txn["transactionDate"],
description=txn["description"],
amount=txn["transactionValue"],
@@ -257,7 +258,8 @@ async def get_account_transactions(
# Return full transaction details
data = [
Transaction(
internal_transaction_id=txn["internalTransactionId"],
transaction_id=txn["transactionId"], # NEW: stable bank-provided ID
internal_transaction_id=txn.get("internalTransactionId"),
institution_id=txn["institutionId"],
iban=txn["iban"],
account_id=txn["accountId"],

View File

@@ -75,7 +75,8 @@ async def get_all_transactions(
# Return simplified transaction summaries
data = [
TransactionSummary(
internal_transaction_id=txn["internalTransactionId"],
transaction_id=txn["transactionId"], # NEW: stable bank-provided ID
internal_transaction_id=txn.get("internalTransactionId"),
date=txn["transactionDate"],
description=txn["description"],
amount=txn["transactionValue"],
@@ -89,7 +90,8 @@ async def get_all_transactions(
# Return full transaction details
data = [
Transaction(
internal_transaction_id=txn["internalTransactionId"],
transaction_id=txn["transactionId"], # NEW: stable bank-provided ID
internal_transaction_id=txn.get("internalTransactionId"),
institution_id=txn["institutionId"],
iban=txn["iban"],
account_id=txn["accountId"],