from fastapi import APIRouter, Depends, UploadFile, File from sqlalchemy.orm import Session from typing import List, Optional from app.db.database import get_db from app.services.non_conformities import NonConformityService from app.schemas.non_conformity import NonConformity, NonConformityCreate, NonConformityUpdate from app.schemas.evidence import Evidence router = APIRouter() def get_nc_service(db: Session = Depends(get_db)) -> NonConformityService: return NonConformityService(db) @router.post("/", response_model=NonConformity) def create_nc( nc: NonConformityCreate, service: NonConformityService = Depends(get_nc_service) ): return service.create_nc(nc) @router.get("/", response_model=List[NonConformity]) def read_ncs( activity_id: Optional[int] = None, status: Optional[str] = None, service: NonConformityService = Depends(get_nc_service) ): return service.get_ncs(activity_id, status) @router.get("/{nc_id}", response_model=NonConformity) def read_nc( nc_id: int, service: NonConformityService = Depends(get_nc_service) ): return service.get_nc(nc_id) @router.put("/{nc_id}", response_model=NonConformity) @router.patch("/{nc_id}", response_model=NonConformity) def update_nc( nc_id: int, nc: NonConformityUpdate, service: NonConformityService = Depends(get_nc_service) ): return service.update_nc(nc_id, nc) @router.post("/{nc_id}/upload", response_model=Evidence) async def upload_nc_evidence( nc_id: int, file: UploadFile = File(...), description: Optional[str] = None, captured_at: Optional[str] = None, service: NonConformityService = Depends(get_nc_service) ): return service.upload_nc_evidence(nc_id, file, description, captured_at) @router.delete("/{nc_id}") def delete_nc( nc_id: int, service: NonConformityService = Depends(get_nc_service) ): return service.delete_nc(nc_id) @router.post("/{nc_id}/notify") def notify_responsible( nc_id: int, service: NonConformityService = Depends(get_nc_service) ): return service.notify_responsible(nc_id)