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)); }
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)); }