예제 #1
0
        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));
        }