push current poor attempt at project list api

This commit is contained in:
MiniDigger 2020-08-08 11:43:53 +02:00
parent 5a3e626884
commit 7c1c096c86
2 changed files with 61 additions and 3 deletions

View File

@ -0,0 +1,47 @@
package me.minidigger.hangar.db.dao.api;
import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
import org.jdbi.v3.sqlobject.customizer.AllowUnusedBindings;
import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.stringtemplate4.UseStringTemplateEngine;
import org.springframework.stereotype.Repository;
import java.util.List;
import me.minidigger.hangar.model.Category;
import me.minidigger.hangar.model.generated.Project;
import me.minidigger.hangar.model.generated.Tag;
@Repository
@RegisterBeanMapper(Project.class)
public interface ProjectApiDao {
@UseStringTemplateEngine
@SqlQuery("SELECT p.created_at," +
" p.plugin_id," +
" p.name," +
" p.owner_name," +
" p.slug," +
" p.promoted_versions," +
" p.views," +
" p.downloads," +
" p.recent_views," +
" p.recent_downloads," +
" p.stars," +
" p.watchers," +
" p.category," +
" p.description," +
" COALESCE(p.last_updated, p.created_at) AS last_updated," +
" p.visibility, " +//"<user_actions_taken>" +
" ps.homepage," +
" ps.issues," +
" ps.source," +
" ps.support," +
" ps.license_name," +
" ps.license_url," +
" ps.forum_sync" +
" FROM home_projects p" +
" JOIN projects ps ON p.id = ps.id") // TODO add all the missing filters
@AllowUnusedBindings // todo remove
List<Project> listProjects(String pluginId, List<Category> categories, List<Tag> tags, String query, String owner, boolean seeHidden, Long requesterId, String ordering, long limit, long offset);
}

View File

@ -5,6 +5,7 @@ import me.minidigger.hangar.db.dao.HangarDao;
import me.minidigger.hangar.db.dao.ProjectDao;
import me.minidigger.hangar.db.dao.UserDao;
import me.minidigger.hangar.db.dao.VisibilityDao;
import me.minidigger.hangar.db.dao.api.ProjectApiDao;
import me.minidigger.hangar.db.model.ProjectVersionsTable;
import me.minidigger.hangar.db.model.ProjectVisibilityChangesTable;
import me.minidigger.hangar.db.model.ProjectsTable;
@ -49,15 +50,17 @@ public class ProjectService {
private final HangarDao<ProjectDao> projectDao;
private final HangarDao<UserDao> userDao;
private final HangarDao<VisibilityDao> visibilityDao;
private final HangarDao<ProjectApiDao> projectApiDao;
private final UserService userService;
private final FlagService flagService;
@Autowired
public ProjectService(HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, HangarDao<UserDao> userDao, HangarDao<VisibilityDao> visibilityDao, UserService userService, FlagService flagService) {
public ProjectService(HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, HangarDao<UserDao> userDao, HangarDao<VisibilityDao> visibilityDao, HangarDao<ProjectApiDao> projectApiDao, UserService userService, FlagService flagService) {
this.hangarConfig = hangarConfig;
this.projectDao = projectDao;
this.userDao = userDao;
this.visibilityDao = visibilityDao;
this.projectApiDao = projectApiDao;
this.userService = userService;
this.flagService = flagService;
}
@ -192,8 +195,16 @@ public class ProjectService {
return projectDao.get().getUnhealthyProjects(hangarConfig.projects.getStaleAge().toMillis());
}
public List<Project> getProjects(String pluginId, List<Category> categories, List<Tag> parsedTags, String query, String owner, boolean seeHidden, Long requesterId, ProjectSortingStrategy sort, boolean relevance, long limit, long offset) {
return List.of(getProjectApi("test")); // TODO getProjects query
public List<Project> getProjects(String pluginId, List<Category> categories, List<Tag> tags, String query, String owner, boolean seeHidden, Long requesterId, ProjectSortingStrategy sort, boolean relevance, long limit, long offset) {
String ordering;
if (relevance && query != null && !query.isEmpty()) {
// TODO implement ordering by relevance, see APIVV2Queries#199
ordering = sort.getSql();
} else {
ordering = sort.getSql();
}
return projectApiDao.get().listProjects(pluginId, categories, tags, query, owner, seeHidden, requesterId, ordering, limit, offset);
}
public long countProjects(String pluginId, List<Category> categories, List<Tag> parsedTags, String query, String owner, boolean seeHidden, Long requesterId) {