public ActionResult <ProjectAndRole> AddExistingProjectToExpert(Guid expertId, ProjectAndRole projectAndRole) { if (!expertRepository.ExpertExist(expertId)) { return(NotFound()); } var expert = expertRepository.GetExpertIncludedProjectsAndRoles(expertId); if (expertRepository .ProjectIsAssociatedWithExpert(expert.Id, projectAndRole.Project.Id)) { var expertProject = expert.ExpertProjects .FirstOrDefault(ep => ep.ProjectId == projectAndRole.Project.Id); return(Conflict($"{expertProject.Project.Name} is already associated with {expertProject.Expert.FirstName} " + $"{expertProject.Expert.LastName}")); } expertRepository.AddExpertProject(expert.Id, projectAndRole.Project.Id); expertRepository.Save(); var projectAndRoleToReturn = expertRepository.GetExpertWithProjectsMap(expertId) .ProjectsAndRoles.FirstOrDefault(par => par.Project.Id == projectAndRole.Project.Id); return(CreatedAtRoute("GetExpertProject", new { expertId = expert.Id, projectId = projectAndRoleToReturn.Project.Id }, projectAndRoleToReturn)); }
public ActionResult DeleteExpert(Guid expertId) { if (!expertRepository.ExpertExist(expertId)) { return(NotFound()); } if (expertRepository .GetExpertIncludedProjectsAndRoles(expertId) .ExpertProjects.Count > 0) { expertRepository.RemoveProjectsFromExpert(expertId); } expertRepository.DeleteExpert(expertId); expertRepository.Save(); return(NoContent()); }