from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List, Optional from pydantic import BaseModel from config.database import SessionLocal from models.capex import Capex from models.opex import Opex router = APIRouter(prefix="/api/costs", tags=["Costs"]) def get_db(): db = SessionLocal() try: yield db finally: db.close() # Pydantic schemas for Capex class CapexCreate(BaseModel): scenario_id: int amount: float description: Optional[str] = None class CapexRead(CapexCreate): id: int class Config: orm_mode = True # Pydantic schemas for Opex class OpexCreate(BaseModel): scenario_id: int amount: float description: Optional[str] = None class OpexRead(OpexCreate): id: int class Config: orm_mode = True # Capex endpoints @router.post("/capex", response_model=CapexRead) def create_capex(item: CapexCreate, db: Session = Depends(get_db)): db_item = Capex(**item.dict()) db.add(db_item) db.commit() db.refresh(db_item) return db_item @router.get("/capex", response_model=List[CapexRead]) def list_capex(db: Session = Depends(get_db)): return db.query(Capex).all() # Opex endpoints @router.post("/opex", response_model=OpexRead) def create_opex(item: OpexCreate, db: Session = Depends(get_db)): db_item = Opex(**item.dict()) db.add(db_item) db.commit() db.refresh(db_item) return db_item @router.get("/opex", response_model=List[OpexRead]) def list_opex(db: Session = Depends(get_db)): return db.query(Opex).all()