Files
2026-04-19 20:41:37 +02:00

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")