public bool Execute(IUseCaseOutput <DeleteUserResponse> output, DeleteUserRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                if (!_userRepository.DeleteUser(request.UserId))
                {
                    return(output.Accept(new FailureResponse("User couldn't be deleted.")));
                }

                return(output.Accept(new DeleteUserResponse
                {
                    Message = "User deleted successfully.",
                }));
            }
            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}")));
            }
        }
Exemple #2
0
        public bool Execute(IUseCaseOutput <ChangeRequirementOrderResponse> output, ChangeRequirementOrderRequest 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 type = Enum.Parse <RequirementType>(request.Type);

                var project = _projectRepository.ReadProjectRequirements(request.ProjectId, type);

                var i          = 0;
                var updateList = new List <Project.Requirement>();
                foreach (var requirement in request.Requirements)
                {
                    updateList.Add(new Project.Requirement(
                                       requirement.Id,
                                       type,
                                       requirement.Title,
                                       i++)
                                   );
                }

                project.ChangeRequirements(new Project.Requirement[] {}, updateList, new Project.Requirement[] { });

                if (!_projectRepository.UpdateProjectRequirements(project, type))
                {
                    output.Accept(new FailureResponse("Requirements couldn't be updated"));
                }
                ;

                return(output.Accept(new ChangeRequirementOrderResponse
                {
                    Message = $"Requirements of {project.Name} successfully updated.",
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <AuthorizeUserResponse> output, AuthorizeUserRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var passwordHash = UserValidationHelper.HashPassword(request.Password);
                var user         = _userRepository.FindUserInfo(request.UserName, passwordHash);

                return(output.Accept(new AuthorizeUserResponse
                {
                    UserId = user.Id,
                    DisplayName = user.DisplayName,
                }));
            }
            catch (EntityNotFoundException)
            {
                return(output.Accept(new FailureResponse($"Username or password is invalid.")));
            }
            catch (Exception e)
            {
                return(output.Accept(new FailureResponse($"Tehnical error happend. {e.Message}")));
            }
        }
Exemple #4
0
        public bool Execute(IUseCaseOutput <ChangeInformationResponse> output, ChangeInformationInitialRequest 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.IsAdministrator)
                {
                    return(output.Accept(new FailureResponse("User can't change information of the project.")));
                }

                var project = _projectRepository.ReadProject(request.ProjectId, false, false);

                return(output.Accept(new ChangeInformationResponse
                {
                    ProjectId = project.Id,
                    Name = project.Name,
                    Description = project.Description,
                }));
            }
            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}")));
            }
        }
Exemple #5
0
        public bool Execute(IUseCaseOutput <ViewProjectResponse> output, ViewProjectRequest 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.CanViewProject)
                {
                    return(output.Accept(new FailureResponse("User can't view this project.")));
                }

                var project = _projectRepository.ReadProject(request.ProjectId, request.ShowRequirements, request.ShowUseCases);

                return(output.Accept(new ViewProjectResponse
                {
                    Name = project.Name,
                    Description = project.Description,
                    ProjectId = request.ProjectId,
                    Author = new User
                    {
                        Id = project.Author.Id,
                        Name = project.Author.DisplayName,
                    },
                    Rights = new ProjectRights
                    {
                        UserName = request.RequestedBy,
                        CanViewProject = rights.CanViewProject,
                        CanChangeRequirements = rights.CanChangeRequirements,
                        CanChangeUseCases = rights.CanChangeUseCases,
                        CanChangeProjectRights = rights.CanChangeProjectRights,
                        IsAdministrator = rights.IsAdministrator,
                    },
                    Requirements = project.Requirements?.Select(r => new Requirement
                    {
                        Id = r.Id,
                        Type = r.Type.ToString(),
                        Title = r.Title,
                    }) ?? new List <Requirement>(),
                    UseCases = project.UseCases?.Select(r => new UseCase
                    {
                        Id = r.Id,
                        Title = r.Title,
                    }) ?? new List <UseCase>(),
                    ShowRequirements = request.ShowRequirements,
                    ShowUseCases = request.ShowUseCases,
                }));
            }
            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}")));
            }
        }
Exemple #6
0
        public bool Execute(IUseCaseOutput <AddUseCaseResponse> output, AddUseCaseInitialRequest 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.CanChangeUseCases)
                {
                    return(output.Accept(new FailureResponse("User can't change use cases of this. project")));
                }

                var user    = _userRepository.ReadUserInfo(request.RequestedBy);
                var project = _projectRepository.ReadProject(request.ProjectId, false, false);

                return(output.Accept(new AddUseCaseResponse
                {
                    ProjectId = project.Id,
                    ProjectName = project.Name,
                }));
            }
            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}")));
            }
        }
Exemple #7
0
        public bool Execute(IUseCaseOutput <ChangePasswordResponse> output, ChangePasswordInitialRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var user = _userRepository.ReadUser(request.UserId, false);
                return(output.Accept(new ChangePasswordResponse
                {
                    UserId = user.Id,
                    UserName = user.UserName,
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ViewProfileResponse> output, ViewProfileRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var user = _userRepository.ReadUser(request.UserId, true);

                return(output.Accept(new ViewProfileResponse
                {
                    UserId = user.Id,
                    UserName = user.UserName,
                    DisplayName = user.DisplayName,
                    Projects = user.Projects.Select(x => new Project
                    {
                        Identifier = x.Id,
                        Name = x.Name,
                    }),
                }));
            }
            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}")));
            }
        }
Exemple #9
0
        public bool Execute(IUseCaseOutput <DeleteUseCaseResponse> output, DeleteUseCaseRequest 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.CanChangeUseCases)
                {
                    return(output.Accept(new FailureResponse("User can't change use cases of this project.")));
                }

                if (!_useCaseRepository.DeleteUseCase(request.UseCaseId))
                {
                    return(output.Accept(new FailureResponse("Use case couldn't be deleted.")));
                }

                return(output.Accept(new DeleteUseCaseResponse
                {
                    Message = "Use case deleted successfully",
                }));
            }
            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}")));
            }
        }
Exemple #10
0
        public bool Execute(IUseCaseOutput <ChangeUseCaseResponse> output, ChangeUseCaseRequest 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.CanChangeUseCases)
                {
                    return(output.Accept(new FailureResponse("User can't change use cases of this project.")));
                }

                var useCase = _useCaseRepository.ReadUseCase(request.UseCaseId);


                var i     = 0;
                var steps = request.Steps.
                            Select(requestStep => new UseCase.UseCaseStep
                {
                    Content     = requestStep,
                    OrderMarker = i++
                })
                            .ToList();

                useCase.Title = request.Title;
                useCase.Note  = request.Note;
                useCase.Steps = steps;

                if (!_useCaseRepository.UpdateUseCase(useCase))
                {
                    return(output.Accept(new FailureResponse("Use case couldn't be updated")));
                }

                return(output.Accept(new ChangeUseCaseResponse
                {
                    ProjectId = useCase.Project.Id,
                    UseCaseId = useCase.Id,
                    Message = "Use case updated successfully",
                }));
            }
            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}")));
            }
        }
Exemple #11
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}")));
            }
        }
Exemple #12
0
        public bool Execute(IUseCaseOutput <ChangeRequirementResponse> output, ChangeRequirementRequest 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 requirement = _requirementRepository.ReadRequirement(request.RequirementId);
                requirement.Title = request.Title;
                requirement.Type  = Enum.Parse <RequirementType>(request.Type);
                requirement.Note  = request.Note;

                if (!_requirementRepository.UpdateRequirement(requirement))
                {
                    return(output.Accept(new FailureResponse("Requirement couldn't be updated.")));
                }

                return(output.Accept(new ChangeRequirementResponse
                {
                    ProjectId = requirement.Project.Id,
                    RequirementId = requirement.Id,
                    Message = "Requirement updated successfully",
                }));
            }
            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}")));
            }
        }
Exemple #13
0
        public bool Execute(IUseCaseOutput <ChangeInformationResponse> output, ChangeInformationRequest 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.IsAdministrator)
                {
                    return(output.Accept(new FailureResponse("User can't change information of the project.")));
                }

                var project = _projectRepository.ReadProject(request.ProjectId, false, false);

                project.Name        = request.Name;
                project.Description = request.Description;

                if (!_projectRepository.UpdateProject(project, false))
                {
                    return(output.Accept(new FailureResponse("Couldn't update the project.")));
                }

                return(output.Accept(new ChangeInformationResponse
                {
                    Message = $"Project {project.Name} successfully updated.",
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ChangeRightsResponse> output, ChangeRightsInitialRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

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

                var rights = _securityGateway.GetProjectRights(request.ProjectId);

                var project = _projectRepository.ReadProject(request.ProjectId, false, false);

                return(output.Accept(new ChangeRightsResponse
                {
                    ProjectId = request.ProjectId,
                    Name = project.Name,
                    Rights = rights.Select(r => new ProjectRights
                    {
                        UserName = r.UserName,
                        CanViewProject = r.CanViewProject,
                        CanChangeRequirements = r.CanChangeRequirements,
                        CanChangeUseCases = r.CanChangeUseCases,
                        CanChangeProjectRights = r.CanChangeProjectRights,
                        IsAdministrator = r.IsAdministrator,
                    }),
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ViewUseCaseResponse> output, ViewUseCaseRequest 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.CanViewProject)
                {
                    return(output.Accept(new FailureResponse("User can't view this project.")));
                }

                var useCase = _useCaseRepository.ReadUseCase(request.UseCaseId);

                return(output.Accept(new ViewUseCaseResponse
                {
                    Project = new Project {
                        Id = useCase.Project.Id, Name = useCase.Project.Name
                    },
                    Author = new User {
                        Id = useCase.Author.Id, Name = useCase.Author.DisplayName
                    },
                    UseCaseId = useCase.Id,
                    Title = useCase.Title,
                    Note = useCase.Note,
                    Steps = useCase.Steps.Select(x => x.Content),
                    CanChange = rights.CanChangeUseCases,
                }));
            }
            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}")));
            }
        }
Exemple #16
0
        public bool Execute(IUseCaseOutput <ViewRequirementResponse> output, ViewRequirementRequest 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.CanViewProject)
                {
                    return(output.Accept(new FailureResponse("User can't view this project.")));
                }

                var requirement = _requirementRepository.ReadRequirement(request.RequirementId);

                return(output.Accept(new ViewRequirementResponse
                {
                    Project = new Project {
                        Id = requirement.Project.Id, Name = requirement.Project.Name
                    },
                    Author = new User {
                        Id = requirement.Author.Id, Name = requirement.Author.DisplayName
                    },
                    RequirementId = requirement.Id,
                    Title = requirement.Title,
                    Type = requirement.Type.ToString(),
                    Note = requirement.Note,
                    CanChange = rights.CanChangeRequirements,
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ChangeInformationResponse> output, ChangeInformationRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var user = _userRepository.ReadUserInfo(request.UserId);
                user.DisplayName = request.DisplayName;

                if (!_userRepository.UpdateUserInfo(user))
                {
                    return(output.Accept(new FailureResponse("User information couldn't be updated.")));
                }

                return(output.Accept(new ChangeInformationResponse
                {
                    UserId = user.Id,
                    Message = "Username changed successfully",
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ViewProjectRequirementsResponse> output, ViewProjectRequirementsRequest 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.CanViewProject)
                {
                    return(output.Accept(new FailureResponse("User can't view this project.")));
                }

                var project = _projectRepository.ReadProjectRequirements(request.ProjectId, Enum.Parse <RequirementType>(request.Type));

                return(output.Accept(new ViewProjectRequirementsResponse
                {
                    Name = project.Name,
                    ProjectId = request.ProjectId,
                    Type = request.Type,
                    Requirements = project.Requirements.Select(r => new Requirement
                    {
                        Id = r.Id,
                        Type = request.Type,
                        Title = r.Title,
                    }),
                }));
            }
            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}")));
            }
        }
Exemple #19
0
        public bool Execute(IUseCaseOutput <ChangePasswordResponse> output, ChangePasswordRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var user = _userRepository.ReadUser(request.RequestedBy, false);
                user.ChangePassword(request.NewPassword, request.OldPassword);

                if (!_userRepository.UpdateUser(user))
                {
                    return(output.Accept(new FailureResponse("Password couldn't be changed.")));
                }

                return(output.Accept(new ChangePasswordResponse
                {
                    UserId = user.Id,
                    Message = "Password changed successfully"
                }));
            }
            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}")));
            }
        }
Exemple #20
0
        public bool Execute(IUseCaseOutput <AddRequirementResponse> output, AddRequirementInitialRequest request)
        {
            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 project = _projectRepository.ReadProject(request.ProjectId, false, false);

            return(output.Accept(new AddRequirementResponse
            {
                ProjectId = request.ProjectId,
                ProjectName = project.Name,
                Types = new[] { "Bussiness", "User", "Functional", "Nonfunctional" },
            }));
        }
Exemple #21
0
        public bool Execute(IUseCaseOutput <ChangeRequirementResponse> output, ChangeRequirementInitialRequest 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 requirement = _requirementRepository.ReadRequirement(request.RequirementId);

                return(output.Accept(new ChangeRequirementResponse
                {
                    ProjectId = requirement.Project.Id,
                    ProjectName = requirement.Project.Name,
                    RequirementId = requirement.Id,
                    Type = requirement.Type.ToString(),
                    Title = requirement.Title,
                    Note = requirement.Note,
                    Types = new[] { "Bussiness", "User", "Functional", "Nonfunctional" },
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <ChangeUseCaseOrderResponse> output, ChangeUseCaseOrderInitialRequest 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.CanChangeUseCases)
                {
                    return(output.Accept(new FailureResponse("User can't change use cases of this project.")));
                }

                var project = _projectRepository.ReadProject(request.ProjectId, false, true);

                return(output.Accept(new ChangeUseCaseOrderResponse
                {
                    Name = project.Name,
                    ProjectId = request.ProjectId,
                    UseCases = project.UseCases.Select(r => new UseCase
                    {
                        Id = r.Id,
                        Title = r.Title,
                    }),
                }));
            }
            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}")));
            }
        }
        public bool Execute(IUseCaseOutput <CreateProjectResponse> output, CreateProjectRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var user    = _userRepository.ReadUserInfo(request.RequestedBy);
                var project = new Project(Identity.BlankIdentity, user, request.Name, request.Description);
                var id      = _projectRepository.CreateProject(project);

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

                return(output.Accept(new CreateProjectResponse
                {
                    GivenId = id,
                    Message = $"Project {project.Name} 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 (Exception e)
            {
                return(output.Accept(new FailureResponse($"Tehnical error happend. {e.Message}")));
            }
        }
        public bool Execute(IUseCaseOutput <RegisterUserResponse> output, RegisterUserRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

                var passwordHash = UserValidationHelper.HashPassword(request.Password);
                var user         = new User(Identity.BlankIdentity, request.UserName, request.DisplayName, passwordHash);

                var id = _userRepository.CreateUser(user);
                if (id == null)
                {
                    return(output.Accept(new FailureResponse("User couldn't be registered.")));
                }

                return(output.Accept(new RegisterUserResponse
                {
                    GivenId = user.Id,
                    Message = $"User {user.UserName} 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 (Exception e)
            {
                return(output.Accept(new FailureResponse($"Tehnical error happend. {e.Message}")));
            }
        }
        public bool Execute(IUseCaseOutput <ChangeRightsResponse> output, ChangeRightsRequest request)
        {
            try
            {
                if (!request.Validate(out var errors))
                {
                    return(output.Accept(new ValidationErrorResponse(errors, "Invalid request.")));
                }

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

                if (request.Rights == null)
                {
                    var project = _projectRepository.ReadProject(request.ProjectId, false, false);
                    request.Rights = new[]
                    {
                        new ProjectRights
                        {
                            UserName               = project.Author.Id,
                            CanViewProject         = true,
                            CanChangeRequirements  = true,
                            CanChangeUseCases      = true,
                            CanChangeProjectRights = true,
                            IsAdministrator        = true,
                        }
                    };
                }

                var rights = request.Rights.Select(r => new Security.Entities.ProjectRights(
                                                       _userRepository.FindUserByName(r.UserName).Id,
                                                       r.UserName,
                                                       request.ProjectId,
                                                       r.CanViewProject,
                                                       r.CanChangeRequirements,
                                                       r.CanChangeUseCases,
                                                       r.CanChangeProjectRights,
                                                       r.IsAdministrator)
                                                   );

                if (!_securityGateway.ChangeProjectRights(request.ProjectId, rights))
                {
                    return(output.Accept(new FailureResponse("Project rights couldn't be updated.")));
                }

                return(output.Accept(new ChangeRightsResponse
                {
                    ProjectId = request.ProjectId,
                    Message = "Project rights successfully updated"
                }));
            }
            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}")));
            }
        }
Exemple #26
0
        public bool Execute(IUseCaseOutput <AddUseCaseResponse> output, AddUseCaseRequest 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.CanChangeUseCases)
                {
                    return(output.Accept(new FailureResponse("User can't change use cases of this. project")));
                }

                var user    = _userRepository.ReadUserInfo(request.RequestedBy);
                var project = _projectRepository.ReadProject(request.ProjectId, false, false);

                var i     = 0;
                var steps = new List <UseCase.UseCaseStep>();
                foreach (var requestStep in request.Steps)
                {
                    steps.Add(new UseCase.UseCaseStep {
                        Content = requestStep, OrderMarker = i++
                    });
                }

                var useCase = new UseCase(
                    Identity.BlankIdentity,
                    project,
                    user,
                    request.Title,
                    request.Note,
                    steps);

                var id = _useCaseRepository.CreateUseCase(useCase);
                if (id == null)
                {
                    return(output.Accept(new FailureResponse("Use case couldn't be created.")));
                }

                return(output.Accept(new AddUseCaseResponse
                {
                    GivenId = id,
                    ProjectId = project.Id,
                    Message = "Use case 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}")));
            }
        }