from fastapi import Depends, APIRouter, File, Form, HTTPException, UploadFile, status from sqlalchemy.orm import Session from db.session import get_db from db.repository.maintenancejob import ( create_new_maintenancejob, create_car_part, get_all_maintenance_jobs, get_maintenance_job, change_maintenance_status, ) from typing import List from schemas.maintenancejob import ( CreateMaintenanceJob, OutputMaintenanceJob, OutputMinimalMaintenanceJob, ) from schemas.carpart import CreateCarPart, ShowCarPart from db.models.user import User from apis.v1.route_auth import get_current_user router = APIRouter() @router.post("/", status_code=status.HTTP_201_CREATED) def create_maintenancejob( maintenancejob: CreateMaintenanceJob, db: Session = Depends(get_db), current_user: User = Depends(get_current_user), ): if current_user.Role != "Driver" and current_user.Role != "Admin": raise HTTPException( status_code=403, detail="You are not authorized to perform this action" ) maintenancejob_res = create_new_maintenancejob(maintenancejob=maintenancejob, db=db) if maintenancejob_res == "nodriver": raise HTTPException(status_code=404, detail="This car has no driver") return maintenancejob_res @router.post( "/carpart", response_model=ShowCarPart, status_code=status.HTTP_201_CREATED ) def create_carpart( car_part: CreateCarPart = Depends(), db: Session = Depends(get_db), current_user: User = Depends(get_current_user), ): if current_user.Role != "Maintenance" and current_user.Role != "Admin": raise HTTPException( status_code=403, detail="You are not authorized to perform this action" ) car_part_res = create_car_part(car_part=car_part, db=db) return car_part_res @router.get( "/", response_model=List[OutputMinimalMaintenanceJob], status_code=status.HTTP_200_OK, ) def get_all_maintenancejobs( db: Session = Depends(get_db), current_user: User = Depends(get_current_user), ): if current_user.Role != "Maintenance" and current_user.Role != "Admin": raise HTTPException( status_code=403, detail="You are not authorized to perform this action" ) maintenancejobs = get_all_maintenance_jobs(db) return maintenancejobs @router.get( "/{maintenance_job_id}", response_model=OutputMaintenanceJob, status_code=status.HTTP_200_OK, ) def get_maintenancejob( maintenance_job_id: int, db: Session = Depends(get_db), ): maintenancejob = get_maintenance_job(maintenance_job_id, db) if maintenancejob is None: raise HTTPException( status_code=404, detail="Maintenance job with this id does not exist" ) return maintenancejob @router.patch("/{maintenance_job_id}", status_code=status.HTTP_200_OK) def change_status( maintenance_job_id: int, status: str, db: Session = Depends(get_db), current_user: User = Depends(get_current_user), ): if current_user.Role != "Maintenance": raise HTTPException( status_code=403, detail="You are not authorized to perform this action" ) result = change_maintenance_status(maintenance_job_id, status, current_user.Id, db) if result is None: raise HTTPException(status_code=404, detail="Maintenance job not found") return result