"""Requests router""" from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from ..database import get_db from ..crud import requests from ..schemas.request import Request, RequestCreate, RequestUpdate, RequestStatistics from ..utils.auth import get_current_employee, get_current_admin from ..utils.telegram import notify_new_request from ..utils.loggers import request_logger router = APIRouter() @router.post("", response_model=Request) @router.post("/", response_model=Request) async def create_request( request: RequestCreate, db: Session = Depends(get_db), current_employee: dict = Depends(get_current_employee) ): """ Создание новой заявки """ # Логируем входящие данные request_logger.info( "Creating new request", extra={ "request_data": request.model_dump(), "employee_id": current_employee["id"] } ) # Проверяем, что все поля заполнены правильно request_logger.info(f"Request title: {request.title}") request_logger.info(f"Request description: {request.description}") request_logger.info(f"Request priority: {request.priority} (type: {type(request.priority)})") request_logger.info(f"Request status: {request.status} (type: {type(request.status)})") db_request = requests.create_request(db=db, request=request, employee_id=current_employee["id"]) # Логируем созданную заявку request_logger.info( "Request created successfully", extra={ "request_id": db_request.id, "status": db_request.status, "priority": db_request.priority } ) await notify_new_request(db_request.id) return db_request @router.get("", response_model=List[Request]) @router.get("/", response_model=List[Request]) def get_employee_requests( skip: int = 0, limit: int = 100, db: Session = Depends(get_db), current_employee: dict = Depends(get_current_employee) ): """ Получение списка заявок текущего сотрудника """ return requests.get_employee_requests(db, employee_id=current_employee["id"], skip=skip, limit=limit) @router.get("/statistics", response_model=RequestStatistics) def get_request_statistics( db: Session = Depends(get_db), _: dict = Depends(get_current_admin) ): """ Получение статистики по заявкам (только для админа) """ return requests.get_statistics(db) @router.put("/{request_id}", response_model=Request) def update_request( request_id: int, request_update: RequestUpdate, db: Session = Depends(get_db), _: dict = Depends(get_current_admin) ): """ Обновление статуса заявки (только для админа) """ db_request = requests.get_request(db, request_id=request_id) if db_request is None: raise HTTPException(status_code=404, detail="Request not found") return requests.update_request(db=db, request_id=request_id, request=request_update) @router.delete("/{request_id}") def delete_request( request_id: int, db: Session = Depends(get_db), _: dict = Depends(get_current_admin) ): """ Удаление заявки (только для админа) """ db_request = requests.get_request(db, request_id=request_id) if db_request is None: raise HTTPException(status_code=404, detail="Request not found") requests.delete_request(db=db, request_id=request_id) return {"message": "Request deleted successfully"}