示例#1
0
        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());
        }
示例#2
0
        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);
        }