76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
"""API-Routen für Mitarbeiterverwaltung."""
|
||
|
|
|
||
|
|
from fastapi import APIRouter, Depends, HTTPException
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
from ..database import get_db
|
||
|
|
from ..core.schemas import EmployeeCreate, EmployeeUpdate, EmployeeRead
|
||
|
|
from ..core.enums import EmployeeRole
|
||
|
|
from ..employees.service import EmployeeService
|
||
|
|
from .auth import get_current_user, require_role
|
||
|
|
from ..core.models import Employee
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/employees", tags=["Mitarbeiter"])
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/", response_model=list[EmployeeRead])
|
||
|
|
def list_employees(
|
||
|
|
active_only: bool = True,
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
_user: Employee = Depends(get_current_user),
|
||
|
|
):
|
||
|
|
svc = EmployeeService(db)
|
||
|
|
return svc.list_employees(active_only)
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/{employee_id}", response_model=EmployeeRead)
|
||
|
|
def get_employee(
|
||
|
|
employee_id: str,
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
_user: Employee = Depends(get_current_user),
|
||
|
|
):
|
||
|
|
svc = EmployeeService(db)
|
||
|
|
emp = svc.get_employee(employee_id)
|
||
|
|
if not emp:
|
||
|
|
raise HTTPException(404, "Mitarbeiter nicht gefunden")
|
||
|
|
return emp
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/", response_model=EmployeeRead, status_code=201)
|
||
|
|
def create_employee(
|
||
|
|
data: EmployeeCreate,
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
_user: Employee = Depends(require_role(EmployeeRole.ADMIN, EmployeeRole.MANAGER)),
|
||
|
|
):
|
||
|
|
svc = EmployeeService(db)
|
||
|
|
try:
|
||
|
|
return svc.create_employee(data)
|
||
|
|
except ValueError as e:
|
||
|
|
raise HTTPException(409, str(e))
|
||
|
|
|
||
|
|
|
||
|
|
@router.patch("/{employee_id}", response_model=EmployeeRead)
|
||
|
|
def update_employee(
|
||
|
|
employee_id: str,
|
||
|
|
data: EmployeeUpdate,
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
_user: Employee = Depends(require_role(EmployeeRole.ADMIN, EmployeeRole.MANAGER)),
|
||
|
|
):
|
||
|
|
svc = EmployeeService(db)
|
||
|
|
emp = svc.update_employee(employee_id, data)
|
||
|
|
if not emp:
|
||
|
|
raise HTTPException(404, "Mitarbeiter nicht gefunden")
|
||
|
|
return emp
|
||
|
|
|
||
|
|
|
||
|
|
@router.delete("/{employee_id}", status_code=204)
|
||
|
|
def delete_employee(
|
||
|
|
employee_id: str,
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
_user: Employee = Depends(require_role(EmployeeRole.ADMIN)),
|
||
|
|
):
|
||
|
|
svc = EmployeeService(db)
|
||
|
|
if not svc.delete_employee(employee_id):
|
||
|
|
raise HTTPException(404, "Mitarbeiter nicht gefunden")
|