예제 #1
0
        public async Task <IActionResult> CreateProjectMember(int projectId, NewProjectMemberDto newProjectMember)
        {
            _logger.LogRequest("Creating member in project {projectId}. Request body: {@newProjectMember}", projectId, newProjectMember);

            try
            {
                if (projectId != newProjectMember.ProjectId)
                {
                    _logger.LogWarning("Project Id doesn't match");
                    return(BadRequest("Project Id doesn't match."));
                }

                var(newProjectMemberId, newUserId) = (0, 0);
                if (newProjectMember.UserId > 0)
                {
                    newProjectMemberId = await _projectMemberService.AddProjectMember(newProjectMember.ProjectId,
                                                                                      newProjectMember.UserId,
                                                                                      newProjectMember.ProjectMemberRoleId);
                }
                else
                {
                    (newProjectMemberId, newUserId) = await _projectMemberService.AddProjectMember(newProjectMember.ProjectId,
                                                                                                   newProjectMember.Email,
                                                                                                   newProjectMember.FirstName,
                                                                                                   newProjectMember.LastName,
                                                                                                   newProjectMember.ExternalAccountIds,
                                                                                                   newProjectMember.ProjectMemberRoleId,
                                                                                                   _configuration[ConfigurationKey.WebUrl]);
                }

                var projectMember = await _projectMemberService.GetProjectMemberById(newProjectMemberId);

                var result = _mapper.Map <ProjectMemberDto>(projectMember);

                _logger.LogResponse("Members in project {projectId} created. Response body: {@results}", projectId, result);

                return(CreatedAtRoute("GetProjectMemberById", new { projectId = newProjectMember.ProjectId,
                                                                    memberId = newProjectMemberId }, result));
            }
            catch (UserNotFoundException userEx)
            {
                _logger.LogWarning(userEx, "User not found");
                return(BadRequest(userEx.Message));
            }
            catch (UserCreationFailedException userCreateEx)
            {
                _logger.LogWarning(userCreateEx, "User creation failed");
                return(BadRequest(userCreateEx.Message));
            }
            catch (DuplicateUserEmailException dupUserEx)
            {
                _logger.LogWarning(dupUserEx, "Duplicate user email");
                return(BadRequest(dupUserEx.Message));
            }
            catch (ProjectNotFoundException projEx)
            {
                _logger.LogWarning(projEx, "Project not found");
                return(BadRequest(projEx.Message));
            }
        }