from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from ..db import get_db from ..models import Cemetery from ..schemas import CemeteryCreate, CemeteryOut, CemeteryUpdate from ..dependencies import require_admin router = APIRouter() @router.post("/", response_model=CemeteryOut, dependencies=[Depends(require_admin)]) def create_cemetery(payload: CemeteryCreate, db: Session = Depends(get_db)): cemetery = Cemetery(**payload.dict()) db.add(cemetery) db.commit() db.refresh(cemetery) return cemetery @router.get("/", response_model=list[CemeteryOut]) def list_cemeteries(db: Session = Depends(get_db)): return db.query(Cemetery).order_by(Cemetery.id.desc()).all() @router.get("/{cemetery_id}", response_model=CemeteryOut) def get_cemetery(cemetery_id: int, db: Session = Depends(get_db)): cemetery = db.query(Cemetery).get(cemetery_id) if not cemetery: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Not found") return cemetery @router.patch("/{cemetery_id}", response_model=CemeteryOut, dependencies=[Depends(require_admin)]) def update_cemetery(cemetery_id: int, payload: CemeteryUpdate, db: Session = Depends(get_db)): cemetery = db.query(Cemetery).get(cemetery_id) if not cemetery: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Not found") for k, v in payload.dict(exclude_unset=True).items(): setattr(cemetery, k, v) db.commit() db.refresh(cemetery) return cemetery @router.delete("/{cemetery_id}", status_code=204, dependencies=[Depends(require_admin)]) def delete_cemetery(cemetery_id: int, db: Session = Depends(get_db)): cemetery = db.query(Cemetery).get(cemetery_id) if not cemetery: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Not found") db.delete(cemetery) db.commit() return None