package org.dicadeveloper.weplantaforest.reports.projects; import java.util.List; import org.dicadeveloper.weplantaforest.projects.Project; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; public interface ProjectReportRepository extends CrudRepository<Project, Long> { public final static String FIND_ALL_PROJECTS_QUERY = "SELECT new org.dicadeveloper.weplantaforest.reports.projects.ProjectReportData( " + "project.id, project.name, project.imageFileName, project.description, project.longitude, project.latitude, SUM(articles.amount), " + "COALESCE((SELECT SUM(tree.amount) FROM Tree as tree WHERE tree.projectArticle IN(SELECT article FROM ProjectArticle article WHERE article.project = project)),0), project.shopActive) " + "FROM Project project JOIN project.articles articles WHERE articles.project = project GROUP BY project.name ORDER BY project.id DESC"; public final static String FIND_ALL_PROJECTS_COUNT_QUERY = "SELECT count(distinct project.name) from Project project"; public final static String FIND_ALL_ACTIVE_PROJECTS_QUERY = "SELECT new org.dicadeveloper.weplantaforest.reports.projects.ProjectReportData( " + "project.id, project.name, project.imageFileName, project.description, project.longitude, project.latitude, SUM(articles.amount), " + "COALESCE((SELECT SUM(tree.amount) FROM Tree as tree WHERE tree.projectArticle IN(SELECT article FROM ProjectArticle article WHERE article.project = project)),0), project.shopActive) " + "FROM Project project JOIN project.articles articles WHERE project.shopActive = true AND articles.project = project GROUP BY project.name ORDER BY project.id DESC"; public final static String FIND_ALL_INACTIVE_PROJECTS_QUERY = "SELECT new org.dicadeveloper.weplantaforest.reports.projects.ProjectReportData( " + "project.id, project.name, project.imageFileName, project.description, project.longitude, project.latitude, SUM(articles.amount), " + "COALESCE((SELECT SUM(tree.amount) FROM Tree as tree WHERE tree.projectArticle IN(SELECT article FROM ProjectArticle article WHERE article.project = project)),0), project.shopActive) " + "FROM Project project JOIN project.articles articles WHERE project.shopActive = false AND articles.project = project GROUP BY project.name ORDER BY project.id DESC"; public final static String FIND_POJECT_DATA_BY_NAME = "SELECT new org.dicadeveloper.weplantaforest.reports.projects.ProjectReportData( " + "project.id, project.name, project.imageFileName, project.description, project.longitude, project.latitude, SUM(articles.amount), " + "COALESCE((SELECT SUM(tree.amount) FROM Tree as tree WHERE tree.projectArticle IN(SELECT article FROM ProjectArticle article WHERE article.project = project)),0), project.shopActive) " + "FROM Project project JOIN project.articles articles WHERE project.name = :projectName " + "AND articles.project = project"; @Query(value = FIND_ALL_PROJECTS_QUERY, countQuery = FIND_ALL_PROJECTS_COUNT_QUERY) Page<ProjectReportData> getAllProjects(Pageable page); @Query(value = FIND_ALL_ACTIVE_PROJECTS_QUERY, countQuery = FIND_ALL_PROJECTS_COUNT_QUERY + " WHERE project.shopActive = true") List<ProjectReportData> getActiveProjects(); @Query(value = FIND_ALL_INACTIVE_PROJECTS_QUERY, countQuery = FIND_ALL_PROJECTS_COUNT_QUERY + " WHERE project.shopActive = false") Page<ProjectReportData> getInActiveProjects(Pageable page); @Query(value = FIND_POJECT_DATA_BY_NAME) ProjectReportData getProjectDataByProjectName(@Param("projectName") String projectName); }