from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from ..database import get_db from .. import models from typing import List from pydantic import BaseModel from datetime import datetime router = APIRouter() class VisitCreate(BaseModel): provider_id: int client_id: int start_time: str | None = None duration_minutes: int class VisitOut(VisitCreate): id: int class Config: orm_mode = True @router.post("/", response_model=VisitOut, status_code=status.HTTP_201_CREATED) def create_visit(visit: VisitCreate, db: Session = Depends(get_db)): # Convert ISO string to datetime start_dt = datetime.fromisoformat(visit.start_time) if visit.start_time else None db_visit = models.Visit( provider_id=visit.provider_id, client_id=visit.client_id, start_time=start_dt, duration_minutes=visit.duration_minutes, ) db.add(db_visit) try: db.commit() db.refresh(db_visit) except Exception as e: db.rollback() raise HTTPException(status_code=400, detail=str(e)) return db_visit @router.get("/", response_model=List[VisitOut]) def list_visits(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): visits = db.query(models.Visit).offset(skip).limit(limit).all() return visits @router.get("/{visit_id}", response_model=VisitOut) def get_visit(visit_id: int, db: Session = Depends(get_db)): visit = db.query(models.Visit).filter(models.Visit.id == visit_id).first() if not visit: raise HTTPException(status_code=404, detail="Visit not found") return visit