Moving ledger route conversion to resource

This commit is contained in:
2025-02-16 23:13:56 +01:00
parent a83711315f
commit 4a823b7115
2 changed files with 11 additions and 12 deletions

View File

@@ -1,18 +1,19 @@
from datetime import date
from sqlalchemy import and_, select from sqlalchemy import and_, select
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from ledger.schema import TransactionLedgerRead
from transaction.models import Split, Transaction from transaction.models import Split, Transaction
class LedgerResource: class LedgerResource:
@classmethod @classmethod
def get_ledger(cls, session, account_id): def get_ledger(cls, session, account_id):
split_account = aliased(Split) split_account = aliased(Split)
return session.exec( stmt = select(Transaction, split_account).join(
select(Transaction, split_account).join(split_account, and_( split_account,
split_account.account_id == account_id, and_(Transaction.id == split_account.transaction_id, split_account.account_id == account_id)
Transaction.id == split_account.transaction_id )
))).all()
return [TransactionLedgerRead(transaction=transaction, account_split=split) for transaction, split in session.exec(stmt).all()]

View File

@@ -3,15 +3,13 @@ from uuid import UUID
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from db import SessionDep from db import SessionDep
from ledger.resource import LedgerResource
from ledger.schema import TransactionLedgerRead from ledger.schema import TransactionLedgerRead
from transaction.resource import TransactionResource
from user.manager import get_current_user from user.manager import get_current_user
router = APIRouter() router = APIRouter()
@router.get("/{account_id}") @router.get("/{account_id}")
def read_ledger(account_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> list[TransactionLedgerRead]: def read_ledger(account_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> list[TransactionLedgerRead]:
response = [] return LedgerResource.get_ledger(session, account_id)
for transaction, split in TransactionResource.get_ledger(session, account_id):
response.append(TransactionLedgerRead(transaction=transaction, account_split=split))
return response