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()

View File

@@ -5,15 +5,14 @@ from fastapi.security import OAuth2PasswordBearer
from fastapi.middleware.cors import CORSMiddleware
from fastapi_pagination import add_pagination
from db import create_db_and_tables
from user import user_router, auth_router, create_admin_user
from account.account_routes import router as account_router
from account.category_routes import router as category_router
from ledger.routes import router as ledger_router
from payee.routes import router as payee_router
from transaction.routes import router as transaction_router
@asynccontextmanager
async def lifespan(app: FastAPI):
create_db_and_tables()
@@ -41,6 +40,7 @@ app.include_router(auth_router, prefix="/auth", tags=["auth"], )
app.include_router(user_router, prefix="/users", tags=["users"])
app.include_router(account_router, prefix="/accounts", tags=["accounts"])
app.include_router(category_router, prefix="/categories", tags=["categories"])
app.include_router(ledger_router, prefix="/ledgers", tags=["ledgers"])
app.include_router(payee_router, prefix="/payees", tags=["payees"])
app.include_router(transaction_router, prefix="/transactions", tags=["transactions"])