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