# -*- coding: utf-8 -*- """Service Layer für Mitarbeiterverwaltung.""" from typing import Optional from sqlalchemy.orm import Session from ..core.models import Employee from ..core.schemas import EmployeeCreate, EmployeeUpdate, EmployeeRead from .repository import EmployeeRepository class EmployeeService: def __init__(self, db: Session): self.db = db self.repo = EmployeeRepository(db) def create_employee(self, data: EmployeeCreate) -> Employee: if data.email: existing = self.repo.get_by_email(data.email) if existing: raise ValueError(f"E-Mail {data.email} ist bereits vergeben") emp = self.repo.create(data) self.db.commit() return emp def update_employee(self, employee_id: str, data: EmployeeUpdate) -> Optional[Employee]: if data.email: existing = self.repo.get_by_email(data.email) if existing and existing.id != employee_id: raise ValueError(f"E-Mail {data.email} ist bereits vergeben") emp = self.repo.update(employee_id, data) if emp: self.db.commit() return emp def delete_employee(self, employee_id: str) -> bool: ok = self.repo.delete(employee_id) if ok: self.db.commit() return ok def deactivate_employee(self, employee_id: str) -> Optional[Employee]: return self.update_employee(employee_id, EmployeeUpdate(is_active=False)) def get_employee(self, employee_id: str) -> Optional[Employee]: return self.repo.get_by_id(employee_id) def list_employees(self, active_only: bool = True) -> list[Employee]: return self.repo.list_all(active_only) def list_by_department(self, department: str) -> list[Employee]: return self.repo.list_by_department(department)