1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00
Files
AdministrationItDepartmens/backend/app/routers/employees.py
2025-01-03 02:47:56 +06:00

91 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Employees router"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from ..database import get_db
from ..models.employee import Employee
from ..schemas.employee import EmployeeCreate, EmployeeResponse, EmployeeUpdate
from ..utils.auth import get_current_admin
from passlib.context import CryptContext
router = APIRouter()
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
@router.get("", response_model=List[EmployeeResponse])
@router.get("/", response_model=List[EmployeeResponse])
def get_employees(db: Session = Depends(get_db), _: dict = Depends(get_current_admin)):
"""Get all employees"""
employees = db.query(Employee).all()
return employees
@router.get("/{employee_id}", response_model=EmployeeResponse)
def get_employee(employee_id: int, db: Session = Depends(get_db), _: dict = Depends(get_current_admin)):
"""Get employee by ID"""
employee = db.query(Employee).filter(Employee.id == employee_id).first()
if not employee:
raise HTTPException(status_code=404, detail="Сотрудник не найден")
return employee
@router.post("", response_model=EmployeeResponse)
@router.post("/", response_model=EmployeeResponse)
def create_employee(employee: EmployeeCreate, db: Session = Depends(get_db), _: dict = Depends(get_current_admin)):
"""Create new employee"""
# Хешируем пароль
hashed_password = pwd_context.hash(employee.password)
# Создаем нового сотрудника
db_employee = Employee(
first_name=employee.first_name,
last_name=employee.last_name,
department=employee.department,
office=employee.office,
password=hashed_password
)
# Сохраняем в базу данных
db.add(db_employee)
db.commit()
db.refresh(db_employee)
return db_employee
@router.put("/{employee_id}", response_model=EmployeeResponse)
def update_employee(
employee_id: int,
employee_update: EmployeeUpdate,
db: Session = Depends(get_db),
_: dict = Depends(get_current_admin)
):
"""Update employee data"""
db_employee = db.query(Employee).filter(Employee.id == employee_id).first()
if not db_employee:
raise HTTPException(status_code=404, detail="Сотрудник не найден")
# Обновляем данные
update_data = employee_update.model_dump(exclude_unset=True)
# Если передан пароль, хешируем его
if 'password' in update_data:
update_data['password'] = pwd_context.hash(update_data['password'])
for field, value in update_data.items():
setattr(db_employee, field, value)
db.commit()
db.refresh(db_employee)
return db_employee
@router.delete("/{employee_id}")
def delete_employee(
employee_id: int,
db: Session = Depends(get_db),
_: dict = Depends(get_current_admin)
):
"""Delete employee"""
db_employee = db.query(Employee).filter(Employee.id == employee_id).first()
if not db_employee:
raise HTTPException(status_code=404, detail="Сотрудник не найден")
db.delete(db_employee)
db.commit()
return {"message": "Сотрудник успешно удален"}