add personal
This commit is contained in:
126
main.py
126
main.py
@ -157,3 +157,129 @@ def delete_car(
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(app, host="0.0.0.0", port=3000)
|
||||
|
||||
# Персонал ---------
|
||||
|
||||
@app.get("/personal", response_model=schemas.PersonalListResponse)
|
||||
def get_all_personal(
|
||||
skip: int = Query(0, description="Количество пропускаемых записей"),
|
||||
limit: int = Query(100, description="Максимальное количество записей"),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
staff = crud.get_all_personal(db, skip=skip, limit=limit)
|
||||
total = crud.get_personal_count(db)
|
||||
return {"staff": staff, "total": total}
|
||||
|
||||
@app.get("/personal/{personal_id}", response_model=schemas.PersonalResponse)
|
||||
def get_personal(
|
||||
personal_id: int = Path(..., description="ID сотрудника", gt=0),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
personal = crud.get_personal(db, personal_id=personal_id)
|
||||
if personal is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Сотрудник не найден"
|
||||
)
|
||||
return {"personal": personal}
|
||||
|
||||
@app.post("/personal", response_model=schemas.PersonalResponse, status_code=status.HTTP_201_CREATED)
|
||||
async def create_personal(
|
||||
personal_data: str = Form(..., description="Данные сотрудника в JSON формате"),
|
||||
photo: UploadFile = File(None, description="Фотография сотрудника"),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
try:
|
||||
# Преобразуем строку JSON в словарь
|
||||
personal_dict = json.loads(personal_data)
|
||||
|
||||
# Загружаем фото, если оно предоставлено
|
||||
if photo:
|
||||
photo_path = await save_image(photo)
|
||||
personal_dict["photo"] = photo_path
|
||||
|
||||
# Создаем объект Pydantic для валидации данных
|
||||
personal = schemas.PersonalCreate(**personal_dict)
|
||||
|
||||
# Создаем запись в БД
|
||||
db_personal = crud.create_personal(db=db, personal=personal)
|
||||
return {"personal": db_personal}
|
||||
except ValueError as e:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=str(e)
|
||||
)
|
||||
except json.JSONDecodeError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Неверный формат JSON"
|
||||
)
|
||||
|
||||
@app.put("/personal/{personal_id}", response_model=schemas.PersonalResponse)
|
||||
async def update_personal(
|
||||
personal_id: int = Path(..., description="ID сотрудника", gt=0),
|
||||
personal_data: str = Form(None, description="Данные сотрудника в JSON формате"),
|
||||
photo: UploadFile = File(None, description="Фотография сотрудника"),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
# Проверяем существование сотрудника
|
||||
existing_personal = crud.get_personal(db, personal_id=personal_id)
|
||||
if existing_personal is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Сотрудник не найден"
|
||||
)
|
||||
|
||||
try:
|
||||
# Преобразуем строку JSON в словарь, если она предоставлена
|
||||
personal_dict = {}
|
||||
if personal_data:
|
||||
personal_dict = json.loads(personal_data)
|
||||
|
||||
# Загружаем новую фотографию, если она предоставлена
|
||||
if photo:
|
||||
# Удаляем старую фотографию, если есть
|
||||
if existing_personal.photo:
|
||||
delete_image(existing_personal.photo)
|
||||
|
||||
# Сохраняем новую фотографию
|
||||
photo_path = await save_image(photo)
|
||||
personal_dict["photo"] = photo_path
|
||||
|
||||
# Создаем объект Pydantic для валидации данных
|
||||
personal_update = schemas.PersonalUpdate(**personal_dict)
|
||||
|
||||
# Обновляем запись в БД
|
||||
updated_personal = crud.update_personal(db=db, personal_id=personal_id, personal_update=personal_update)
|
||||
return {"personal": updated_personal}
|
||||
except ValueError as e:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=str(e)
|
||||
)
|
||||
except json.JSONDecodeError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Неверный формат JSON"
|
||||
)
|
||||
|
||||
@app.delete("/personal/{personal_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def delete_personal(
|
||||
personal_id: int = Path(..., description="ID сотрудника", gt=0),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
# Получаем сотрудника перед удалением
|
||||
personal = crud.get_personal(db, personal_id=personal_id)
|
||||
if personal is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Сотрудник не найден"
|
||||
)
|
||||
|
||||
# Удаляем фотографию, если есть
|
||||
if personal.photo:
|
||||
delete_image(personal.photo)
|
||||
|
||||
# Удаляем запись из БД
|
||||
crud.delete_personal(db=db, personal_id=personal_id)
|
||||
return None
|
||||
|
Reference in New Issue
Block a user