from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from typing import List, Optional from pydantic import BaseModel, ConfigDict 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 model_config = ConfigDict(from_attributes=True) # Pydantic schemas for Opex class OpexCreate(BaseModel): scenario_id: int amount: float description: Optional[str] = None class OpexRead(OpexCreate): id: int model_config = ConfigDict(from_attributes=True) # Capex endpoints @router.post("/capex", response_model=CapexRead) def create_capex(item: CapexCreate, db: Session = Depends(get_db)): db_item = Capex(**item.model_dump()) 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.model_dump()) 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()