mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-03-13 15:39:18 +08:00
fixed NPE on projects that have no recommended version
* tiny formatting fix for ProjectList component
This commit is contained in:
parent
8bc9cc76d3
commit
b5ff4d064a
@ -14,8 +14,8 @@
|
||||
:key="project.namespace.owner + project.namespace.slug"
|
||||
>
|
||||
<div class="container-fluid">
|
||||
<div class="row flex-lg-nowrap flex-md-wrap">
|
||||
<div class="flex-shrink-0 pl-3">
|
||||
<div class="row flex-lg-nowrap flex-md-wrap px-3">
|
||||
<div class="flex-shrink-0">
|
||||
<Icon :name="project.namespace.owner" :src="project.icon_url" extra-classes="user-avatar-sm"></Icon>
|
||||
</div>
|
||||
<div class="flex-lg-shrink-0 ml-2">
|
||||
|
@ -31,6 +31,7 @@ import io.papermc.hangar.service.DownloadsService;
|
||||
import io.papermc.hangar.service.StatsService;
|
||||
import io.papermc.hangar.service.UserActionLogService;
|
||||
import io.papermc.hangar.service.VersionService;
|
||||
import io.papermc.hangar.service.VersionService.RecommendedVersionService;
|
||||
import io.papermc.hangar.service.pluginupload.PendingVersion;
|
||||
import io.papermc.hangar.service.pluginupload.PluginUploadService;
|
||||
import io.papermc.hangar.service.pluginupload.ProjectFiles;
|
||||
@ -86,6 +87,7 @@ public class VersionsController extends HangarController {
|
||||
|
||||
private final ProjectService projectService;
|
||||
private final VersionService versionService;
|
||||
private final RecommendedVersionService recommendedVersionService;
|
||||
private final ProjectFactory projectFactory;
|
||||
private final StatsService statsService;
|
||||
private final PluginUploadService pluginUploadService;
|
||||
@ -109,9 +111,10 @@ public class VersionsController extends HangarController {
|
||||
|
||||
|
||||
@Autowired
|
||||
public VersionsController(ProjectService projectService, VersionService versionService, ProjectFactory projectFactory, StatsService statsService, PluginUploadService pluginUploadService, ChannelService channelService, DownloadsService downloadsService, UserActionLogService userActionLogService, CacheManager cacheManager, HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, ProjectFiles projectFiles, HangarDao<ProjectVersionDownloadWarningDao> downloadWarningDao, MessageSource messageSource, ObjectMapper mapper, HttpServletRequest request, HttpServletResponse response, Supplier<ProjectVersionsTable> projectVersionsTable, Supplier<VersionData> versionData, Supplier<ProjectsTable> projectsTable, Supplier<ProjectData> projectData) {
|
||||
public VersionsController(ProjectService projectService, VersionService versionService, RecommendedVersionService recommendedVersionService, ProjectFactory projectFactory, StatsService statsService, PluginUploadService pluginUploadService, ChannelService channelService, DownloadsService downloadsService, UserActionLogService userActionLogService, CacheManager cacheManager, HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, ProjectFiles projectFiles, HangarDao<ProjectVersionDownloadWarningDao> downloadWarningDao, MessageSource messageSource, ObjectMapper mapper, HttpServletRequest request, HttpServletResponse response, Supplier<ProjectVersionsTable> projectVersionsTable, Supplier<VersionData> versionData, Supplier<ProjectsTable> projectsTable, Supplier<ProjectData> projectData) {
|
||||
this.projectService = projectService;
|
||||
this.versionService = versionService;
|
||||
this.recommendedVersionService = recommendedVersionService;
|
||||
this.projectFactory = projectFactory;
|
||||
this.statsService = statsService;
|
||||
this.pluginUploadService = pluginUploadService;
|
||||
@ -261,7 +264,7 @@ public class VersionsController extends HangarController {
|
||||
@ResponseBody
|
||||
public Object downloadRecommended(@PathVariable String author, @PathVariable String slug, @RequestParam(required = false) String token) {
|
||||
ProjectsTable project = projectsTable.get();
|
||||
ProjectVersionsTable recommendedVersion = versionService.getRecommendedVersion(project);
|
||||
ProjectVersionsTable recommendedVersion = recommendedVersionService.getRecommendedVersion(project);
|
||||
if (recommendedVersion == null) {
|
||||
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
|
||||
} else {
|
||||
@ -273,7 +276,7 @@ public class VersionsController extends HangarController {
|
||||
@ResponseBody
|
||||
public Object downloadRecommendedJar(@PathVariable String author, @PathVariable String slug, @RequestParam(required = false) String token) {
|
||||
ProjectsTable project = projectsTable.get();
|
||||
ProjectVersionsTable recommendedVersion = versionService.getRecommendedVersion(project);
|
||||
ProjectVersionsTable recommendedVersion = recommendedVersionService.getRecommendedVersion(project);
|
||||
if (recommendedVersion == null) {
|
||||
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
|
||||
} else {
|
||||
|
@ -24,6 +24,7 @@ import io.papermc.hangar.service.project.ChannelService;
|
||||
import io.papermc.hangar.service.project.ProjectService;
|
||||
import io.papermc.hangar.util.RequestUtil;
|
||||
import io.papermc.hangar.util.StringUtils;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -49,18 +50,20 @@ public class VersionService extends HangarService {
|
||||
private final ProjectService projectService;
|
||||
private final ChannelService channelService;
|
||||
private final VisibilityService visibilityService;
|
||||
private final RecommendedVersionService recommendedVersionService;
|
||||
private final UserService userService;
|
||||
|
||||
private final HttpServletRequest request;
|
||||
|
||||
@Autowired
|
||||
public VersionService(HangarDao<ProjectVersionDao> versionDao, HangarDao<ProjectDao> projectDao, HangarDao<VisibilityDao> visibilityDao, ProjectService projectService, ChannelService channelService, VisibilityService visibilityService, UserService userService, HttpServletRequest request) {
|
||||
public VersionService(HangarDao<ProjectVersionDao> versionDao, HangarDao<ProjectDao> projectDao, HangarDao<VisibilityDao> visibilityDao, ProjectService projectService, ChannelService channelService, VisibilityService visibilityService, RecommendedVersionService recommendedVersionService, UserService userService, HttpServletRequest request) {
|
||||
this.versionDao = versionDao;
|
||||
this.projectDao = projectDao;
|
||||
this.visibilityDao = visibilityDao;
|
||||
this.projectService = projectService;
|
||||
this.channelService = channelService;
|
||||
this.visibilityService = visibilityService;
|
||||
this.recommendedVersionService = recommendedVersionService;
|
||||
this.userService = userService;
|
||||
this.request = request;
|
||||
}
|
||||
@ -82,13 +85,14 @@ public class VersionService extends HangarService {
|
||||
|
||||
@Bean
|
||||
@RequestScope
|
||||
public Supplier<VersionData> versionData() {
|
||||
@Autowired
|
||||
public Supplier<VersionData> versionData(Supplier<ProjectData> projectDataSupplier) {
|
||||
//noinspection SpringConfigurationProxyMethods
|
||||
return () -> this.getVersionData(projectService.projectData().get(), projectVersionsTable().get());
|
||||
return () -> this.getVersionData(projectDataSupplier.get(), projectVersionsTable().get());
|
||||
}
|
||||
|
||||
public ProjectVersionsTable getMostRelevantVersion(ProjectsTable project) {
|
||||
Optional<ProjectVersionsTable> version = Optional.ofNullable(getRecommendedVersion(project));
|
||||
Optional<ProjectVersionsTable> version = Optional.ofNullable(recommendedVersionService.getRecommendedVersion(project));
|
||||
return version.or(() -> Optional.ofNullable(getMostRecentVersion(project))).orElse(null);
|
||||
}
|
||||
|
||||
@ -96,12 +100,7 @@ public class VersionService extends HangarService {
|
||||
return versionDao.get().getMostRecentVersion(project.getId());
|
||||
}
|
||||
|
||||
public ProjectVersionsTable getRecommendedVersion(ProjectsTable project) {
|
||||
if (project.getRecommendedVersionId() == null) {
|
||||
return null;
|
||||
}
|
||||
return visibilityService.checkVisibility(versionDao.get().getProjectVersion(project.getId(), "", project.getRecommendedVersionId()), ProjectVersionsTable::getProjectId);
|
||||
}
|
||||
|
||||
|
||||
public ProjectVersionsTable getVersion(long projectId, long versionId) {
|
||||
return visibilityService.checkVisibility(versionDao.get().getProjectVersion(projectId, "", versionId), ProjectVersionsTable::getProjectId);
|
||||
@ -198,4 +197,26 @@ public class VersionService extends HangarService {
|
||||
public Map<ProjectVersionVisibilityChangesTable, String> getVersionVisibilityChanges(long versionId) {
|
||||
return visibilityDao.get().getProjectVersionVisibilityChanges(versionId);
|
||||
}
|
||||
|
||||
@Service
|
||||
public static class RecommendedVersionService {
|
||||
|
||||
private final VisibilityService visibilityService;
|
||||
private final HangarDao<ProjectVersionDao> versionDao;
|
||||
|
||||
@Autowired
|
||||
public RecommendedVersionService(VisibilityService visibilityService, HangarDao<ProjectVersionDao> versionDao) {
|
||||
this.visibilityService = visibilityService;
|
||||
this.versionDao = versionDao;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ProjectVersionsTable getRecommendedVersion(ProjectsTable project) {
|
||||
if (project.getRecommendedVersionId() == null) {
|
||||
return null;
|
||||
}
|
||||
return visibilityService.checkVisibility(versionDao.get().getProjectVersion(project.getId(), "", project.getRecommendedVersionId()), ProjectVersionsTable::getProjectId);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import io.papermc.hangar.config.hangar.HangarConfig;
|
||||
import io.papermc.hangar.db.dao.GeneralDao;
|
||||
import io.papermc.hangar.db.dao.HangarDao;
|
||||
import io.papermc.hangar.db.dao.ProjectDao;
|
||||
import io.papermc.hangar.db.dao.ProjectVersionDao;
|
||||
import io.papermc.hangar.db.dao.UserDao;
|
||||
import io.papermc.hangar.db.dao.VisibilityDao;
|
||||
import io.papermc.hangar.db.model.ProjectVersionsTable;
|
||||
@ -25,6 +24,7 @@ import io.papermc.hangar.model.viewhelpers.UnhealthyProject;
|
||||
import io.papermc.hangar.model.viewhelpers.UserRole;
|
||||
import io.papermc.hangar.service.HangarService;
|
||||
import io.papermc.hangar.service.PermissionService;
|
||||
import io.papermc.hangar.service.VersionService.RecommendedVersionService;
|
||||
import io.papermc.hangar.service.VisibilityService;
|
||||
import io.papermc.hangar.service.pluginupload.ProjectFiles;
|
||||
import io.papermc.hangar.util.RequestUtil;
|
||||
@ -53,26 +53,26 @@ public class ProjectService extends HangarService {
|
||||
private final HangarDao<ProjectDao> projectDao;
|
||||
private final HangarDao<UserDao> userDao;
|
||||
private final HangarDao<VisibilityDao> visibilityDao;
|
||||
private final HangarDao<ProjectVersionDao> versionDao;
|
||||
private final HangarDao<GeneralDao> generalDao;
|
||||
private final FlagService flagService;
|
||||
private final VisibilityService visibilityService;
|
||||
private final RecommendedVersionService recommendedVersionService;
|
||||
private final PermissionService permissionService;
|
||||
private final ProjectFiles projectFiles;
|
||||
|
||||
private final HttpServletRequest request;
|
||||
|
||||
@Autowired
|
||||
public ProjectService(HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, HangarDao<UserDao> userDao, HangarDao<VisibilityDao> visibilityDao, HangarDao<ProjectVersionDao> versionDao, HangarDao<GeneralDao> generalDao, ProjectFiles projectFiles, FlagService flagService, VisibilityService visibilityService, PermissionService permissionService, HttpServletRequest request) {
|
||||
public ProjectService(HangarConfig hangarConfig, HangarDao<ProjectDao> projectDao, HangarDao<UserDao> userDao, HangarDao<VisibilityDao> visibilityDao, HangarDao<GeneralDao> generalDao, ProjectFiles projectFiles, FlagService flagService, VisibilityService visibilityService, RecommendedVersionService recommendedVersionService, PermissionService permissionService, HttpServletRequest request) {
|
||||
this.hangarConfig = hangarConfig;
|
||||
this.projectDao = projectDao;
|
||||
this.userDao = userDao;
|
||||
this.visibilityDao = visibilityDao;
|
||||
this.versionDao = versionDao;
|
||||
this.generalDao = generalDao;
|
||||
this.projectFiles = projectFiles;
|
||||
this.flagService = flagService;
|
||||
this.visibilityService = visibilityService;
|
||||
this.recommendedVersionService = recommendedVersionService;
|
||||
this.permissionService = permissionService;
|
||||
this.request = request;
|
||||
}
|
||||
@ -122,7 +122,7 @@ public class ProjectService extends HangarService {
|
||||
noteCount = messages.size();
|
||||
}
|
||||
Map.Entry<String, ProjectVisibilityChangesTable> latestProjectVisibilityChangeWithUser = visibilityDao.get().getLatestProjectVisibilityChange(projectsTable.getId());
|
||||
ProjectVersionsTable recommendedVersion = visibilityService.checkVisibility(versionDao.get().getProjectVersion(projectsTable.getId(), "", projectsTable.getRecommendedVersionId()), ProjectVersionsTable::getProjectId);
|
||||
ProjectVersionsTable recommendedVersion = recommendedVersionService.getRecommendedVersion(projectsTable);
|
||||
String iconUrl = Routes.PROJECTS_SHOW_ICON.getRouteUrl(projectsTable.getOwnerName(), projectsTable.getSlug());
|
||||
long starCount = userDao.get().getProjectStargazers(projectsTable.getId(), 0, null).size();
|
||||
long watcherCount = userDao.get().getProjectWatchers(projectsTable.getId(), 0, null).size();
|
||||
|
Loading…
x
Reference in New Issue
Block a user