public async Task <IActionResult> DeleteEmployee([Required] Guid id) { var request = new DeleteEmployeeOperationRequest { EmployeeId = id }; try { await _deleteEmployeeOperation.Execute(request); } catch (EmployeeHasSubordinatesException ex) { return(Conflict(ex.Message)); } return(Ok()); }
public async Task Execute(DeleteEmployeeOperationRequest request) { var targetEmployee = await _employeeRepository.GetByIdAsync(request.EmployeeId); bool targetEmployeeHasNoSubordinates = targetEmployee.ManagedTeam == null || !targetEmployee.ManagedTeam.Employees.Any(); if (!targetEmployeeHasNoSubordinates) { throw new EmployeeHasSubordinatesException(request.EmployeeId); } var isAuthorizedToDelete = await _authorizationContext.IsAuthorizedForEmployee(request.EmployeeId); if (!isAuthorizedToDelete) { throw new ApplicationException($"Not authorized to delete {targetEmployee.Id}"); } await _employeeRepository.DeleteAsync(targetEmployee); await _userRepository.DeleteAsync(targetEmployee.Identity); }