Adding ledger module

This commit is contained in:
2025-02-16 22:31:35 +01:00
parent 440401049a
commit 699009d21a
5 changed files with 44 additions and 2 deletions

View File

View File

@@ -0,0 +1,18 @@
from datetime import date
from sqlalchemy import and_, select
from sqlalchemy.orm import aliased
from transaction.models import Split, Transaction
class LedgerResource:
@classmethod
def get_ledger(cls, session, account_id):
split_account = aliased(Split)
return session.exec(
select(Transaction, split_account).join(split_account, and_(
split_account.account_id == account_id,
Transaction.id == split_account.transaction_id
))).all()

17
api/app/ledger/routes.py Normal file
View File

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

7
api/app/ledger/schema.py Normal file
View File

@@ -0,0 +1,7 @@
from pydantic import BaseModel, Field
from transaction.models import TransactionRead, SplitRead
class TransactionLedgerRead(BaseModel):
transaction: TransactionRead = Field()
account_split: SplitRead = Field()