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], )