backend / app /api /routers /income_statement.py
praneethys's picture
fix income statement endpoints (#16)
4761dd9 verified
Raw
History Blame Contribute Delete
2.4 kB
from typing import List
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from app.model.transaction import Transaction as TransactionModel
from app.model.income_statement import IncomeStatement as IncomeStatementModel
from app.schema.index import IncomeStatementCreateRequest, IncomeStatementResponse
from app.engine.postgresdb import get_db_session
from app.service.income_statement import call_llm_to_create_income_statement
income_statement_router = r = APIRouter(prefix="/api/v1/income_statement", tags=["income_statement"])
@r.post(
"/",
responses={
200: {"description": "New transaction created"},
400: {"description": "Bad request"},
500: {"description": "Internal server error"},
},
)
async def create_income_statement(payload: IncomeStatementCreateRequest, db: AsyncSession = Depends(get_db_session)) -> None:
try:
await call_llm_to_create_income_statement(payload, db)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@r.get(
"/user/{user_id}",
response_model=List[IncomeStatementResponse],
responses={
200: {"description": "New user created"},
400: {"description": "Bad request"},
204: {"description": "No content"},
500: {"description": "Internal server error"},
},
)
async def get_income_statements(
user_id: int, db: AsyncSession = Depends(get_db_session)
) -> List[IncomeStatementResponse]:
"""
Retrieve all income statements.
"""
result = await IncomeStatementModel.get_by_user(db, user_id)
if len(result) == 0:
raise HTTPException(status_code=status.HTTP_204_NO_CONTENT, detail="No income statements found for this user")
return result
@r.get(
"/report/{report_id}",
response_model=IncomeStatementResponse,
responses={
200: {"description": "Income statement found"},
404: {"description": "Income statement not found"},
500: {"description": "Internal server error"},
},
)
async def get_income_statement(report_id: int, db: AsyncSession = Depends(get_db_session)) -> IncomeStatementResponse:
income_statement = await IncomeStatementModel.get(db, id=report_id)
if not income_statement:
raise HTTPException(status_code=404, detail="Income statement not found")
return income_statement