sumaq/backend/app/api/v1/endpoints/non_conformities.py

68 lines
2.0 KiB
Python

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)