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));
        }
        /// <summary>
        ///     Get the total number of pages for the results
        /// </summary>
        /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
        /// <returns>The total number of pages for the results</returns>
        public virtual async Task <int> GetProjectsTotalPages(ProjectFilterParams projectFilterParams)
        {
            if (projectFilterParams.AmountOnPage == null ||
                projectFilterParams.AmountOnPage <= 0)
            {
                projectFilterParams.AmountOnPage = 20;
            }
            int count = await ProjectsCount(projectFilterParams);

            return((int)Math.Ceiling(count / (decimal)projectFilterParams.AmountOnPage));
        }
        /// <summary>
        ///     Search for projects in the internal database
        /// </summary>
        /// <param name="query">The search query</param>
        /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
        /// <returns>The projects that match the search query</returns>
        public virtual async Task <int> SearchInternalProjectsTotalPages(
            string query,
            ProjectFilterParams projectFilterParams)
        {
            if (projectFilterParams.AmountOnPage == null ||
                projectFilterParams.AmountOnPage <= 0)
            {
                projectFilterParams.AmountOnPage = 20;
            }
            int count = await SearchInternalProjectsCount(query, projectFilterParams);

            return((int)Math.Ceiling(count / (decimal)projectFilterParams.AmountOnPage));
        }
Exemple #4
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));
        }
        /// <summary>
        ///     Search for projects in the internal database
        /// </summary>
        /// <param name="query">The search query</param>
        /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
        /// <returns>The projects that match the search query</returns>
        public virtual async Task <IEnumerable <Project> > SearchInternalProjects(
            string query,
            ProjectFilterParams projectFilterParams)
        {
            if (!projectFilterParams.AmountOnPage.HasValue ||
                projectFilterParams.AmountOnPage <= 0)
            {
                projectFilterParams.AmountOnPage = 20;
            }

            int?skip = null;
            int?take = null;

            if (projectFilterParams.Page.HasValue)
            {
                skip = projectFilterParams.AmountOnPage * (projectFilterParams.Page - 1);
                take = projectFilterParams.AmountOnPage;
            }

            Expression <Func <Project, object> > orderBy;

            switch (projectFilterParams.SortBy)
            {
            case "name":
                orderBy = project => project.Name;
                break;

            case "created":
                orderBy = project => project.Created;
                break;

            default:
                orderBy = project => project.Updated;
                break;
            }

            bool orderByDirection = projectFilterParams.SortDirection == "asc";

            return(await projectRepository.SearchAsync(query,
                                                       skip,
                                                       take,
                                                       orderBy,
                                                       orderByDirection,
                                                       projectFilterParams.Highlighted));
        }
        /// <summary>
        /// Get a list of all the projects
        /// </summary>
        /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
        /// <returns>A list of all the projects</returns>
        public Task <List <Project> > GetAllWithUsersAndCollaboratorsAsync(ProjectFilterParams projectFilterParams)
        {
            if (!projectFilterParams.AmountOnPage.HasValue ||
                projectFilterParams.AmountOnPage <= 0)
            {
                projectFilterParams.AmountOnPage = 20;
            }

            int?skip = null;
            int?take = null;

            if (projectFilterParams.Page.HasValue)
            {
                skip = projectFilterParams.AmountOnPage * (projectFilterParams.Page - 1);
                take = projectFilterParams.AmountOnPage;
            }

            Expression <Func <Project, object> > orderBy;

            switch (projectFilterParams.SortBy)
            {
            case "name":
                orderBy = project => project.Name;
                break;

            case "created":
                orderBy = project => project.Created;
                break;

            default:
                orderBy = project => project.Updated;
                break;
            }

            bool orderByDirection = projectFilterParams.SortDirection == "asc";

            return(Repository.GetAllWithUsersAndCollaboratorsAsync(skip, take, orderBy, orderByDirection, projectFilterParams.Highlighted));
        }
 /// <summary>
 ///     Get the number of projects
 /// </summary>
 /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
 /// <returns>The number of projects</returns>
 public virtual async Task <int> ProjectsCount(ProjectFilterParams projectFilterParams)
 {
     return(await Repository.CountAsync(projectFilterParams.Highlighted));
 }
 /// <summary>
 ///     Get the number of projects that match the search query
 /// </summary>
 /// <param name="query">The search query</param>
 /// <param name="projectFilterParams">The parameters to filter, sort and paginate the projects</param>
 /// <returns>The number of projects that match the search query</returns>
 public virtual async Task <int> SearchInternalProjectsCount(string query, ProjectFilterParams projectFilterParams)
 {
     return(await projectRepository.SearchCountAsync(query, projectFilterParams.Highlighted));
 }
        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));
        }