from fastapi import APIRouter, Depends, HTTPException from typing import Optional from sqlalchemy.orm import Session from .. import models, schemas, database from ..security import require_roles oboruds = APIRouter(prefix="/oboruds", tags=["oboruds"]) @oboruds.post("/", response_model=schemas.OborudRead, dependencies=[Depends(require_roles(["admin", "editor"]))]) def create_oborud(item: schemas.OborudCreate, db: Session = Depends(database.get_db)): obj = models.Oboruds(**item.dict()) db.add(obj) db.commit() db.refresh(obj) return obj @oboruds.get("/", response_model=list[schemas.OborudRead]) def list_oboruds(aud_id: Optional[int] = None, db: Session = Depends(database.get_db)): query = db.query(models.Oboruds) if aud_id is not None: query = query.filter(models.Oboruds.aud_id == aud_id) return query.all() @oboruds.get("/{oborud_id}", response_model=schemas.OborudRead) def get_oborud(oborud_id: int, db: Session = Depends(database.get_db)): obj = db.query(models.Oboruds).filter(models.Oboruds.id == oborud_id).first() if not obj: raise HTTPException(status_code=404, detail="Oborud not found") return obj @oboruds.patch("/{oborud_id}", response_model=schemas.OborudRead, dependencies=[Depends(require_roles(["admin", "editor"]))]) def update_oborud(oborud_id: int, payload: schemas.OborudUpdate, db: Session = Depends(database.get_db)): obj = db.query(models.Oboruds).filter(models.Oboruds.id == oborud_id).first() if not obj: raise HTTPException(status_code=404, detail="Oborud not found") data = payload.dict(exclude_unset=True) for k, v in data.items(): setattr(obj, k, v) db.commit() db.refresh(obj) return obj