public async Task <IActionResult> SearchInternalProjects(string query,
                                                                 [FromQuery] ProjectFilterParamsResource projectFilterParamsResource)
        {
            ProblemDetails problem = new ProblemDetails
            {
                Title = "Invalid search request."
            };

            if (string.IsNullOrEmpty(query))
            {
                problem.Detail   = "The Query parameter cannot be empty.";
                problem.Instance = "13A59FAE-E98F-42B3-AFD4-84F3019EC790";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.Page != null &&
                projectFilterParamsResource.Page < 1)
            {
                problem.Detail   = "The page number cannot be smaller then 1.";
                problem.Instance = "65EB6EF1-2CF4-4F7B-8A0A-C047C701337A";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortBy != null &&
                projectFilterParamsResource.SortBy != "name" &&
                projectFilterParamsResource.SortBy != "created" &&
                projectFilterParamsResource.SortBy != "updated")
            {
                problem.Detail   = "Invalid sort value: Use \"name\", \"created\" or \"updated\".";
                problem.Instance = "5CE2F569-C0D5-4179-9299-62916270A058";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortDirection != null &&
                projectFilterParamsResource.SortDirection != "asc" &&
                projectFilterParamsResource.SortDirection != "desc")
            {
                problem.Detail   = "Invalid sort direction: Use \"asc\" or \"desc\".";
                problem.Instance = "3EE043D5-070B-443A-A951-B252A1BB8EF9";
                return(BadRequest(problem));
            }

            ProjectFilterParams   projectFilterParams = mapper.Map <ProjectFilterParamsResource, ProjectFilterParams>(projectFilterParamsResource);
            IEnumerable <Project> projects            = await searchService.SearchInternalProjects(query, projectFilterParams);

            IEnumerable <ProjectResultResource> searchResults =
                mapper.Map <IEnumerable <Project>, IEnumerable <ProjectResultResource> >(projects);

            ProjectResultsResource searchResultsResource = new ProjectResultsResource()
            {
                Results    = searchResults.ToArray(),
                Query      = query,
                Count      = searchResults.Count(),
                TotalCount = await searchService.SearchInternalProjectsCount(query, projectFilterParams),
                Page       = projectFilterParams.Page,
                TotalPages =
                    await searchService.SearchInternalProjectsTotalPages(query, projectFilterParams)
            };

            return(Ok(searchResultsResource));
        }
Beispiel #2
0
        public async Task <IActionResult> GetAllProjects([FromQuery] ProjectFilterParamsResource projectFilterParamsResource)
        {
            ProblemDetails problem = new ProblemDetails
            {
                Title = "Invalid search request."
            };

            if (projectFilterParamsResource.Page != null &&
                projectFilterParamsResource.Page < 1)
            {
                problem.Detail   = "The page number cannot be smaller then 1.";
                problem.Instance = "65EB6EF1-2CF4-4F7B-8A0A-C047C701337A";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortBy != null &&
                projectFilterParamsResource.SortBy != "name" &&
                projectFilterParamsResource.SortBy != "created" &&
                projectFilterParamsResource.SortBy != "updated")
            {
                problem.Detail   = "Invalid sort value: Use \"name\", \"created\" or \"updated\".";
                problem.Instance = "5CE2F569-C0D5-4179-9299-62916270A058";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortDirection != null &&
                projectFilterParamsResource.SortDirection != "asc" &&
                projectFilterParamsResource.SortDirection != "desc")
            {
                problem.Detail   = "Invalid sort direction: Use \"asc\" or \"desc\".";
                problem.Instance = "3EE043D5-070B-443A-A951-B252A1BB8EF9";
                return(BadRequest(problem));
            }

            ProjectFilterParams   projectFilterParams = mapper.Map <ProjectFilterParamsResource, ProjectFilterParams>(projectFilterParamsResource);
            IEnumerable <Project> projects            = await projectService.GetAllWithUsersAsync(projectFilterParams);

            IEnumerable <ProjectResultResource> results =
                mapper.Map <IEnumerable <Project>, IEnumerable <ProjectResultResource> >(projects);

            ProjectResultsResource resultsResource = new ProjectResultsResource()
            {
                Results    = results.ToArray(),
                Count      = results.Count(),
                TotalCount = await projectService.ProjectsCount(projectFilterParams),
                Page       = projectFilterParams.Page,
                TotalPages =
                    await projectService.GetProjectsTotalPages(projectFilterParams)
            };

            return(Ok(resultsResource));
        }
        public async Task <IActionResult> GetAllProjects(
            [FromQuery] ProjectFilterParamsResource projectFilterParamsResource)
        {
            ProblemDetails problem = new ProblemDetails
            {
                Title = "Invalid search request."
            };

            if (projectFilterParamsResource.Page != null &&
                projectFilterParamsResource.Page < 1)
            {
                problem.Detail   = "The page number cannot be smaller then 1.";
                problem.Instance = "65EB6EF1-2CF4-4F7B-8A0A-C047C701337A";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortBy != null &&
                projectFilterParamsResource.SortBy != "name" &&
                projectFilterParamsResource.SortBy != "created" &&
                projectFilterParamsResource.SortBy != "updated")
            {
                problem.Detail   = "Invalid sort value: Use \"name\", \"created\" or \"updated\".";
                problem.Instance = "5CE2F569-C0D5-4179-9299-62916270A058";
                return(BadRequest(problem));
            }
            if (projectFilterParamsResource.SortDirection != null &&
                projectFilterParamsResource.SortDirection != "asc" &&
                projectFilterParamsResource.SortDirection != "desc")
            {
                problem.Detail   = "Invalid sort direction: Use \"asc\" or \"desc\".";
                problem.Instance = "3EE043D5-070B-443A-A951-B252A1BB8EF9";
                return(BadRequest(problem));
            }

            ProjectFilterParams projectFilterParams =
                mapper.Map <ProjectFilterParamsResource, ProjectFilterParams>(projectFilterParamsResource);

            IEnumerable <Project> projects =
                await projectService.GetAllWithUsersAndCollaboratorsAsync(projectFilterParams);

            List <Project> filteredProjects = new List <Project>();


            if (HttpContext.User.CheckIfUserIsAuthenticated())
            {
                User currentUser = await HttpContext.GetContextUser(userService)
                                   .ConfigureAwait(false);

                foreach (Project project in projects)
                {
                    if (project.InstitutePrivate == false)
                    {
                        filteredProjects.Add(project);
                    }
                    if (project.InstitutePrivate && currentUser.InstitutionId == project.User.InstitutionId)
                    {
                        filteredProjects.Add(project);
                    }
                }
            }
            else
            {
                foreach (Project project in projects)
                {
                    if (project.InstitutePrivate == false)
                    {
                        filteredProjects.Add(project);
                    }
                }
            }


            IEnumerable <ProjectResultResource> results =
                mapper.Map <IEnumerable <Project>, IEnumerable <ProjectResultResource> >(filteredProjects);
            ProjectResultsResource resultsResource = new ProjectResultsResource
            {
                Results    = results.ToArray(),
                Count      = results.Count(),
                TotalCount =
                    await projectService.ProjectsCount(projectFilterParams),
                Page       = projectFilterParams.Page,
                TotalPages =
                    await projectService.GetProjectsTotalPages(
                        projectFilterParams)
            };

            return(Ok(resultsResource));
        }