public async Task <int> AddProjectMember(int projectId, int userId, int roleId, CancellationToken cancellationToken = default(CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); var project = await _projectRepository.GetById(projectId, cancellationToken); if (project == null) { throw new ProjectNotFoundException(projectId); } var user = await _userRepository.GetById(userId, cancellationToken); if (user == null) { throw new UserNotFoundException(userId); } var projectMemberByProjectSpec = new ProjectMemberFilterSpecification(projectId, userId); var projectMember = await _projectMemberRepository.GetSingleBySpec(projectMemberByProjectSpec, cancellationToken); if (projectMember != null) { projectMember.ProjectMemberRoleId = roleId; await _projectMemberRepository.Update(projectMember, cancellationToken); return(projectMember.Id); } var newProjectMember = new ProjectMember { ProjectId = projectId, UserId = userId, ProjectMemberRoleId = roleId }; return(await _projectMemberRepository.Create(newProjectMember, cancellationToken)); }