Adding ledger module
This commit is contained in:
0
api/app/ledger/__init__.py
Normal file
0
api/app/ledger/__init__.py
Normal file
18
api/app/ledger/resource.py
Normal file
18
api/app/ledger/resource.py
Normal 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
17
api/app/ledger/routes.py
Normal 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
7
api/app/ledger/schema.py
Normal 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()
|
||||
@@ -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"])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user