Пример #1
0
        public IActionResult CreateRequest(CreateProjectUserReqRequest req)
        {
            var userId = HttpContext.User.Claims.Single(x => x.Type == "Id").Value;

            var res = _projectUserReqService.Create(Guid.Parse(userId), req);

            if (!res.Success)
            {
                return(BadRequest(res));
            }
            return(Ok(res));
        }
        public CreateResponse <ProjectUserRequestDTO> Create(Guid id, CreateProjectUserReqRequest req)
        {
            var res = new CreateResponse <ProjectUserRequestDTO>();

            var role = _roleRepository.FindById(req.RoleId);

            if (role == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Role not found."));
            }

            var project = _projectRepository.FindById(req.ProjectId);

            if (project == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Project not found."));
            }

            var sender = _userRepository.FindById(id);

            if (sender == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Invalid sender."));
            }

            var userAssigned = _userRepository.FindById(req.UserAssignedId);

            if (userAssigned == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Assigned user not found."));
            }

            var projectManagers = project.ProjectUsersReq
                                  .Where(pur => pur.Accepted == true && pur.Role.RoleName == "PROJECT_MANAGER").ToList();

            if (projectManagers.Find(pur => pur.UserAssigned.Id == id) == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User must be project manager to send requests."));
            }

            if (project.ProjectUsersReq.ToList().Find(pur => pur.UserAssigned.Id == req.UserAssignedId) != null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User has alredy received an invitation."));
            }

            var projectUserReq = new ProjectUserReq()
            {
                Id           = Guid.NewGuid(),
                Message      = req.Message,
                UserAssigned = userAssigned,
                Sender       = sender,
                Role         = role,
                Project      = project,
                Accepted     = false,
                RequestSent  = DateTime.Now
            };

            projectUserReq.Validate();

            if (projectUserReq.GetBrokenRules().Count > 0)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWithMultiple(projectUserReq.GetBrokenRules()));
            }

            _projectUserReqRepository.Save(projectUserReq);

            try
            {
                _uow.Commit();
            }
            catch (Exception ex)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith(ex.Message));
            }

            res.Success = true;
            return(res);
        }