1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

Починка админки полностью2222332

This commit is contained in:
MoonTestUse1
2025-01-01 23:41:46 +06:00
parent d777bc2131
commit ba0188d4b5
2 changed files with 39 additions and 57 deletions

View File

@@ -1,20 +1,15 @@
"""Employee models"""
from pydantic import BaseModel, Field
from datetime import datetime
from typing import Optional
"""Employee model"""
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.sql import func
from ..database import Base
class EmployeeBase(BaseModel):
first_name: str = Field(..., min_length=1)
last_name: str = Field(..., min_length=1)
department: str = Field(..., pattern="^(aho|gkh|general)$")
office: str = Field(..., min_length=1)
class Employee(Base):
__tablename__ = "employees"
class EmployeeCreate(EmployeeBase):
password: str = Field(..., min_length=6)
class Employee(EmployeeBase):
id: int
created_at: datetime
class Config:
from_attributes = True
id = Column(Integer, primary_key=True, index=True)
first_name = Column(String, nullable=False)
last_name = Column(String, nullable=False)
department = Column(String, nullable=False)
office = Column(String, nullable=False)
password = Column(String, nullable=False)
created_at = Column(DateTime(timezone=True), server_default=func.now())

View File

@@ -3,67 +3,54 @@ from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from sqlalchemy.exc import IntegrityError
from ..database import get_db
from ..crud import employees as employees_crud
from ..models.employee import EmployeeCreate
from ..schemas import tables
from pydantic import BaseModel
from ..utils.loggers import auth_logger
from ..models.employee import Employee
router = APIRouter()
class EmployeeCreate(BaseModel):
first_name: str
last_name: str
department: str
office: str
password: str
@router.get("/")
async def get_employees(db: Session = Depends(get_db)):
"""Get all employees"""
try:
employees_list = db.query(tables.Employee).all()
return [
{
"id": emp.id,
"firstName": emp.first_name,
"lastName": emp.last_name,
"department": emp.department,
"office": emp.office,
"createdAt": emp.created_at
}
for emp in employees_list
]
return db.query(Employee).all()
except Exception as e:
auth_logger.error(f"Error fetching employees: {e}", exc_info=True)
auth_logger.error(f"Error fetching employees: {e}")
raise HTTPException(status_code=500, detail="Ошибка при получении списка сотрудников")
@router.post("/")
async def create_employee(employee: EmployeeCreate, db: Session = Depends(get_db)):
"""Create new employee"""
try:
# Check if employee already exists
existing = employees_crud.get_employee_by_lastname(db, employee.last_name)
if existing:
raise HTTPException(
status_code=400,
detail="Сотрудник с такой фамилией уже существует"
)
db_employee = employees_crud.create_employee(db, employee)
auth_logger.info(
"Employee created",
extra={"employee_id": db_employee.id}
# Создаем запись в БД
db_employee = Employee(
first_name=employee.first_name,
last_name=employee.last_name,
department=employee.department,
office=employee.office,
password=employee.password # В реальном приложении пароль нужно хешировать
)
return {
"id": db_employee.id,
"firstName": db_employee.first_name,
"lastName": db_employee.last_name,
"department": db_employee.department,
"office": db_employee.office,
"createdAt": db_employee.created_at
}
db.add(db_employee)
db.commit()
db.refresh(db_employee)
return db_employee
except HTTPException:
raise
except IntegrityError:
db.rollback()
raise HTTPException(
status_code=400,
detail="Сотрудник с такими данными уже существует"
)
except Exception as e:
auth_logger.error(f"Error creating employee: {e}", exc_info=True)
db.rollback()
auth_logger.error(f"Error creating employee: {e}")
raise HTTPException(status_code=500, detail="Ошибка при создании сотрудника")