32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi_filter import FilterDepends
|
|
from fastapi_filter.contrib.sqlalchemy import Filter
|
|
from fastapi_pagination import Page
|
|
from fastapi_pagination.ext.sqlalchemy import paginate
|
|
from fastapi_pagination.utils import disable_installed_extensions_check
|
|
|
|
from db import SessionDep
|
|
from ledger.resource import LedgerResource
|
|
from ledger.schema import TransactionLedgerRead
|
|
from transaction.models import Transaction
|
|
from user.manager import get_current_user
|
|
|
|
router = APIRouter()
|
|
|
|
class LedgerFilters(Filter):
|
|
|
|
class Constants(Filter.Constants):
|
|
model = Transaction
|
|
search_model_fields = ["id", "sequence"]
|
|
disable_installed_extensions_check()
|
|
|
|
@router.get("/{account_id}")
|
|
def read_ledger(account_id: UUID, session: SessionDep, filters: LedgerFilters = FilterDepends(LedgerFilters), current_user=Depends(get_current_user)) -> Page[TransactionLedgerRead]:
|
|
return paginate(
|
|
session,
|
|
LedgerResource.get_ledger(account_id, filters),
|
|
transformer=lambda items: [TransactionLedgerRead(transaction=transaction, account_split=split, balance=balance) for transaction, split, balance in items],
|
|
)
|