from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session import models from database import get_db from typing import List from pydantic import BaseModel router = APIRouter() class ServiceCreate(BaseModel): provider_id: int name: str price: float duration_minutes: int | None = None class ServiceOut(ServiceCreate): id: int class Config: orm_mode = True @router.post("/", response_model=ServiceOut, status_code=status.HTTP_201_CREATED) def create_service(service: ServiceCreate, db: Session = Depends(get_db)): # Verify provider exists provider = db.query(models.Provider).filter(models.Provider.id == service.provider_id).first() if not provider: raise HTTPException(status_code=404, detail="Provider not found") db_service = models.Service( provider_id=service.provider_id, name=service.name, price=service.price, duration_minutes=service.duration_minutes, ) db.add(db_service) try: db.commit() db.refresh(db_service) except Exception as e: db.rollback() raise HTTPException(status_code=400, detail=str(e)) return db_service @router.get("/", response_model=List[ServiceOut]) def list_services(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): services = db.query(models.Service).offset(skip).limit(limit).all() return services @router.get("/{service_id}", response_model=ServiceOut) def get_service(service_id: int, db: Session = Depends(get_db)): service = db.query(models.Service).filter(models.Service.id == service_id).first() if not service: raise HTTPException(status_code=404, detail="Service not found") return service