from asyncio.log import logger from typing import List from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session # database from database import get_db # schemas from schemas.ResponseSchemas import Clinic, ClinicWithDoctors from schemas.CreateSchemas import ClinicCreate from schemas.UpdateSchemas import ClinicUpdate from models.Clinics import Clinics # Constants from utils.constants import DEFAULT_SKIP, DEFAULT_LIMIT router = APIRouter() @router.get("/", response_model=List[Clinic]) async def get_clinics( skip: int = DEFAULT_SKIP, limit: int = DEFAULT_LIMIT, db: Session = Depends(get_db) ): clinics = db.query(Clinics).offset(skip).limit(limit).all() return clinics @router.get("/{clinic_id}", response_model=ClinicWithDoctors) async def get_clinic(clinic_id: int, db: Session = Depends(get_db)): db_clinic = db.query(Clinics).where(Clinics.id == clinic_id).first() if db_clinic is None: raise HTTPException(status_code=404, detail="Clinic not found") return db_clinic @router.post("/", response_model=Clinic, status_code=status.HTTP_201_CREATED) async def create_clinic(clinic: ClinicCreate, db: Session = Depends(get_db)): try: db_clinic = Clinics(**clinic.model_dump()) db.add(db_clinic) db.commit() db.refresh(db_clinic) return db_clinic except Exception as e: db.rollback() raise HTTPException( status_code=500, detail=str(e.__cause__), ) from e @router.put("/{clinic_id}", response_model=Clinic) async def update_clinic( clinic_id: int, clinic: ClinicUpdate, db: Session = Depends(get_db) ): db_clinic = db.query(Clinics).filter(Clinics.id == clinic_id).first() if db_clinic is None: raise HTTPException(status_code=404, detail="Clinic not found") update_data = clinic.model_dump(exclude_unset=True) for key, value in update_data.items(): setattr(db_clinic, key, value) db.commit() db.refresh(db_clinic) return db_clinic @router.delete("/{clinic_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_clinic(clinic_id: int, db: Session = Depends(get_db)): db_clinic = db.query(Clinics).where(Clinics.id == clinic_id).first() if db_clinic is None: raise HTTPException(status_code=404, detail="Clinic not found") db.delete(db_clinic) db.commit() return None