from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from config.database import SessionLocal from models.scenario import Scenario from pydantic import BaseModel, ConfigDict from typing import Optional from datetime import datetime router = APIRouter(prefix="/api/scenarios", tags=["scenarios"]) # Pydantic schemas class ScenarioCreate(BaseModel): name: str description: Optional[str] = None class ScenarioRead(ScenarioCreate): id: int created_at: datetime updated_at: Optional[datetime] = None model_config = ConfigDict(from_attributes=True) # Dependency def get_db(): db = SessionLocal() try: yield db finally: db.close() @router.post("/", response_model=ScenarioRead) def create_scenario(scenario: ScenarioCreate, db: Session = Depends(get_db)): print(f"Creating scenario with name: {scenario.name}") db_s = db.query(Scenario).filter(Scenario.name == scenario.name).first() if db_s: print(f"Scenario with name {scenario.name} already exists.") raise HTTPException(status_code=400, detail="Scenario already exists") new_s = Scenario(name=scenario.name, description=scenario.description) db.add(new_s) db.commit() db.refresh(new_s) print(f"Scenario with name {scenario.name} created successfully.") return new_s @router.get("/", response_model=list[ScenarioRead]) def list_scenarios(db: Session = Depends(get_db)): return db.query(Scenario).all()