refactor(backend): update employees endpoint and service
- endpoints/employees.py: update employees API endpoint - services/employee.py: update employee service
This commit is contained in:
@@ -125,3 +125,22 @@ def disable_employee(employee_id: str, db: DbSession) -> EmployeeRead:
|
|||||||
return EmployeeService(db).disable_employee(employee_id)
|
return EmployeeService(db).disable_employee(employee_id)
|
||||||
except LookupError as exc:
|
except LookupError as exc:
|
||||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
|
||||||
|
|
||||||
|
|
||||||
|
@router.post(
|
||||||
|
"/{employee_id}/enable",
|
||||||
|
response_model=EmployeeRead,
|
||||||
|
summary="启用员工",
|
||||||
|
description="将停用员工恢复为在职状态,使其可以重新登录系统。",
|
||||||
|
responses={
|
||||||
|
status.HTTP_404_NOT_FOUND: {
|
||||||
|
"model": ErrorResponse,
|
||||||
|
"description": "员工不存在。",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
def enable_employee(employee_id: str, db: DbSession) -> EmployeeRead:
|
||||||
|
try:
|
||||||
|
return EmployeeService(db).enable_employee(employee_id)
|
||||||
|
except LookupError as exc:
|
||||||
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
|
||||||
|
|||||||
@@ -333,6 +333,27 @@ class EmployeeService:
|
|||||||
logger.info("Disabled employee id=%s no=%s", employee.id, employee.employee_no)
|
logger.info("Disabled employee id=%s no=%s", employee.id, employee.employee_no)
|
||||||
return self._serialize_employee(hydrated or saved)
|
return self._serialize_employee(hydrated or saved)
|
||||||
|
|
||||||
|
def enable_employee(self, employee_id: str) -> EmployeeRead:
|
||||||
|
self.ensure_directory_ready()
|
||||||
|
|
||||||
|
employee = self.repository.get(employee_id)
|
||||||
|
if employee is None:
|
||||||
|
raise LookupError("Employee not found")
|
||||||
|
|
||||||
|
if employee.employment_status != "停用":
|
||||||
|
return self._serialize_employee(employee)
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
employee.employment_status = "在职"
|
||||||
|
employee.sync_state = "已同步"
|
||||||
|
employee.last_sync_at = now
|
||||||
|
self._append_change_log(employee, action="启用员工账号", occurred_at=now)
|
||||||
|
|
||||||
|
saved = self.repository.save(employee)
|
||||||
|
hydrated = self.repository.get(saved.id)
|
||||||
|
logger.info("Enabled employee id=%s no=%s", employee.id, employee.employee_no)
|
||||||
|
return self._serialize_employee(hydrated or saved)
|
||||||
|
|
||||||
def _seed_roles(self) -> None:
|
def _seed_roles(self) -> None:
|
||||||
existing_by_code = {role.role_code: role for role in self.repository.list_roles()}
|
existing_by_code = {role.role_code: role for role in self.repository.list_roles()}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user