Beispiel #1
0
        public bool Execute(IUseCaseOutput <AddRequirementResponse> output, AddRequirementRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var rights = _securityGateway.GetProjectRights(request.ProjectId, request.RequestedBy);
                if (rights == null || !rights.CanChangeRequirements)
                {
                    return(output.Accept(new FailureResponse("User can't change requirements of this project.")));
                }

                var user        = _userRepository.ReadUserInfo(request.RequestedBy);
                var project     = _projectRepository.ReadProject(request.ProjectId, false, false);
                var requirement = new Requirement(
                    Identity.BlankIdentity,
                    project,
                    user,
                    Enum.Parse <RequirementType>(request.Type),
                    request.Title,
                    request.Note);

                var id = _requirementRepository.CreateRequirement(requirement);

                if (id == null)
                {
                    return(output.Accept(new FailureResponse("Requirement couldn't be created.")));
                }

                return(output.Accept(new AddRequirementResponse
                {
                    GivenId = id,
                    ProjectId = project.Id,
                    Message = $"Requirement successfuly created.",
                }));
            }
            catch (ValidationException e)
            {
                var errors = new Dictionary <string, string> {
                    { e.PropertyKey, e.Message }
                };
                return(output.Accept(new ValidationErrorResponse(errors, $"Invalid data for {e.PropertyKey}.")));
            }
            catch (EntityNotFoundException e)
            {
                return(output.Accept(new FailureResponse($"Entity not found. {e.Message}")));
            }
            catch (Exception e)
            {
                return(output.Accept(new FailureResponse($"Tehnical error happend. {e.Message}")));
            }
        }