Skip to content

Commit

Permalink
feat: remove hangar version
Browse files Browse the repository at this point in the history
  • Loading branch information
MiniDigger committed Jan 14, 2025
1 parent 08bc32b commit 7449487
Show file tree
Hide file tree
Showing 22 changed files with 14,887 additions and 14,151 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import io.papermc.hangar.model.internal.api.requests.versions.UpdatePluginDependencies;
import io.papermc.hangar.model.internal.logs.LogAction;
import io.papermc.hangar.model.internal.logs.contexts.VersionContext;
import io.papermc.hangar.model.internal.versions.HangarVersion;
import io.papermc.hangar.model.internal.versions.MultipartFileOrUrl;
import io.papermc.hangar.model.internal.versions.PendingVersion;
import io.papermc.hangar.security.annotations.Anyone;
Expand Down Expand Up @@ -72,12 +71,6 @@ public VersionController(final VersionFactory versionFactory, final VersionServi
this.pinnedVersionService = pinnedVersionService;
}

@VisibilityRequired(type = VisibilityRequired.Type.PROJECT, args = "{#project}")
@GetMapping(path = "/version/{project}/versions/{versionString}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<HangarVersion> getVersion(@PathVariable final ProjectTable project, @PathVariable("versionString") final ProjectVersionTable version) {
return ResponseEntity.ok(this.versionService.getHangarVersion(project, version));
}

@Unlocked
@RequireAal(1)
@RateLimit(overdraft = 5, refillTokens = 1, refillSeconds = 5)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,63 +1,19 @@
package io.papermc.hangar.db.dao.internal.versions;

import io.papermc.hangar.db.mappers.VersionStatsMapper;
import io.papermc.hangar.model.internal.projects.HangarProject;
import io.papermc.hangar.model.internal.versions.HangarVersion;
import java.util.List;
import org.jdbi.v3.core.enums.EnumStrategy;
import org.jdbi.v3.spring.JdbiRepository;
import org.jdbi.v3.sqlobject.config.RegisterColumnMapper;
import org.jdbi.v3.sqlobject.config.RegisterConstructorMapper;
import org.jdbi.v3.sqlobject.config.UseEnumStrategy;
import org.jdbi.v3.sqlobject.customizer.Define;
import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.stringtemplate4.UseStringTemplateEngine;

@JdbiRepository
@UseStringTemplateEngine
@UseEnumStrategy(EnumStrategy.BY_ORDINAL)
@RegisterConstructorMapper(HangarVersion.class)
public interface HangarVersionsDAO {

@RegisterColumnMapper(VersionStatsMapper.class)
@SqlQuery("""
SELECT pv.id,
pv.created_at,
pv.version_string,
pv.visibility,
pv.description,
coalesce((SELECT sum(pvd.downloads) FROM project_versions_downloads pvd WHERE pv.id = pvd.version_id), 0) vs_totalDownloads,
(select array_agg(d) from (SELECT pvd.platform, sum(pvd.downloads) FROM project_versions_downloads pvd WHERE pv.id = pvd.version_id GROUP BY pvd.platform) d) vs_platformDownloads,
u.name author,
pv.review_state,
pc.created_at pc_created_at,
pc.name pc_name,
pc.description pc_description,
pc.color pc_color,
pc.flags pc_flags,
CASE
WHEN exists(SELECT * FROM pinned_versions piv WHERE piv.version_id = pv.id AND lower(type) = 'channel') THEN 'CHANNEL'
WHEN exists(SELECT * FROM pinned_versions piv WHERE piv.version_id = pv.id AND lower(type) = 'version') THEN 'VERSION'
ELSE 'NONE'
END AS pinnedStatus,
ru.name approved_by
FROM project_versions pv
JOIN project_channels pc ON pv.channel_id = pc.id
LEFT JOIN users u ON pv.author_id = u.id
LEFT JOIN users ru ON pv.reviewer_id = ru.id
WHERE
<if(!canSeeHidden)>
(pv.visibility = 0
<if(userId)>
OR (<userId> IN (SELECT pm.user_id FROM project_members_all pm WHERE pm.id = pv.project_id) AND pv.visibility != 4)
<endif>)
AND
<endif>
pv.id = :versionId
ORDER BY pv.created_at DESC
""")
HangarVersion getVersion(long versionId, @Define boolean canSeeHidden, @Define Long userId);

// TODO fixup view and this
@SqlQuery("""
(SELECT pv.version_id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
@RegisterConstructorMapper(Version.class)
public interface VersionsApiDAO {

@KeyColumn("id")
@RegisterColumnMapper(VersionStatsMapper.class)
@SqlQuery("""
SELECT pv.id,
Expand Down Expand Up @@ -67,7 +66,7 @@ WHEN exists(SELECT * FROM pinned_versions piv WHERE piv.version_id = pv.id AND l
pv.id = :versionId
ORDER BY pv.created_at DESC
""")
@Nullable Map.Entry<Long, Version> getVersion(long versionId, @Define boolean canSeeHidden, @Define Long userId);
@Nullable Version getVersion(long versionId, @Define boolean canSeeHidden, @Define Long userId);

@KeyColumn("id")
@RegisterColumnMapper(VersionStatsMapper.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import io.papermc.hangar.model.api.project.Project;
import io.papermc.hangar.model.api.project.ProjectChannel;
import io.papermc.hangar.model.api.project.version.PlatformVersionDownload;
import io.papermc.hangar.model.api.project.version.Version;
import io.papermc.hangar.model.common.NamedPermission;
import io.papermc.hangar.model.common.Platform;
import io.papermc.hangar.model.db.roles.ProjectRoleTable;
import io.papermc.hangar.model.identified.ProjectIdentified;
import io.papermc.hangar.model.internal.Joinable;
import io.papermc.hangar.model.internal.user.JoinableMember;
import io.papermc.hangar.model.internal.versions.HangarVersion;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;
Expand All @@ -29,9 +29,9 @@ public class HangarProject extends Project implements Joinable<ProjectRoleTable>
private final Collection<HangarProjectPage> pages;
private final ExtendedProjectPage mainPage;
private final List<PinnedVersion> pinnedVersions;
private final Map<Platform, HangarVersion> mainChannelVersions;
private final Map<Platform, Version> mainChannelVersions;

public HangarProject(final Project project, final List<JoinableMember<ProjectRoleTable>> members, final String lastVisibilityChangeComment, final String lastVisibilityChangeUserName, final HangarProjectInfo info, final Collection<HangarProjectPage> pages, final List<PinnedVersion> pinnedVersions, final Map<Platform, HangarVersion> mainChannelVersions, final ExtendedProjectPage mainPage) {
public HangarProject(final Project project, final List<JoinableMember<ProjectRoleTable>> members, final String lastVisibilityChangeComment, final String lastVisibilityChangeUserName, final HangarProjectInfo info, final Collection<HangarProjectPage> pages, final List<PinnedVersion> pinnedVersions, final Map<Platform, Version> mainChannelVersions, final ExtendedProjectPage mainPage) {
super(project);
this.members = members;
this.lastVisibilityChangeComment = lastVisibilityChangeComment;
Expand Down Expand Up @@ -78,7 +78,7 @@ public List<PinnedVersion> getPinnedVersions() {
return this.pinnedVersions;
}

public Map<Platform, HangarVersion> getMainChannelVersions() {
public Map<Platform, Version> getMainChannelVersions() {
return this.mainChannelVersions;
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,12 @@ private boolean match(final Set<String> toAdd, final String selectedVersion, fin

//@Transactional(readOnly = true) // TODO in an ideal world this would be an transaction, but right now this fries the DB
public Version getVersion(final ProjectTable project, final ProjectVersionTable pvt) {
final Map.Entry<Long, Version> version = this.versionsApiDAO.getVersion(pvt.getId(),
final Version version = this.versionsApiDAO.getVersion(pvt.getId(),
this.getGlobalPermissions().has(Permission.SeeHidden), this.getHangarUserId());
if (version == null) {
throw new HangarApiException(HttpStatus.NOT_FOUND);
}
return this.versionDependencyService.addDownloadsAndDependencies(project, pvt, version.getKey()).applyTo(version.getValue());
return this.versionDependencyService.addDownloadsAndDependencies(project.getOwnerName(), project.getName(), version.getName(), version.getId()).applyTo(version);
}

public Version getVersion(final ProjectVersionTable version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@
import io.papermc.hangar.controller.extras.pagination.filters.versions.VersionChannelFilter;
import io.papermc.hangar.controller.extras.pagination.filters.versions.VersionPlatformFilter;
import io.papermc.hangar.db.customtypes.JSONB;
import io.papermc.hangar.db.dao.internal.HangarUsersDAO;
import io.papermc.hangar.db.dao.internal.projects.HangarProjectsDAO;
import io.papermc.hangar.db.dao.internal.table.projects.ProjectsDAO;
import io.papermc.hangar.db.dao.internal.versions.HangarVersionsDAO;
import io.papermc.hangar.db.dao.v1.VersionsApiDAO;
import io.papermc.hangar.exceptions.HangarApiException;
import io.papermc.hangar.model.api.project.Project;
import io.papermc.hangar.model.api.project.settings.LinkSection;
import io.papermc.hangar.model.api.project.settings.LinkSectionType;
import io.papermc.hangar.model.api.project.settings.Tag;
import io.papermc.hangar.model.api.project.version.Version;
import io.papermc.hangar.model.api.requests.RequestPagination;
import io.papermc.hangar.model.common.Permission;
import io.papermc.hangar.model.common.Platform;
Expand All @@ -30,7 +29,6 @@
import io.papermc.hangar.model.internal.projects.HangarProject;
import io.papermc.hangar.model.internal.projects.HangarProjectPage;
import io.papermc.hangar.model.internal.user.JoinableMember;
import io.papermc.hangar.model.internal.versions.HangarVersion;
import io.papermc.hangar.service.PermissionService;
import io.papermc.hangar.service.internal.organizations.OrganizationService;
import io.papermc.hangar.service.internal.versions.PinnedVersionService;
Expand Down Expand Up @@ -65,30 +63,26 @@ public class ProjectService extends HangarComponent {

private static final Pattern KEYWORD_PATTERN = Pattern.compile("^[a-zA-Z0-9-]+$");
private final ProjectsDAO projectsDAO;
private final HangarUsersDAO hangarUsersDAO;
private final HangarProjectsDAO hangarProjectsDAO;
private final ProjectVisibilityService projectVisibilityService;
private final OrganizationService organizationService;
private final ProjectPageService projectPageService;
private final PermissionService permissionService;
private final PinnedVersionService pinnedVersionService;
private final VersionsApiDAO versionsApiDAO;
private final HangarVersionsDAO hangarVersionsDAO;
private final AvatarService avatarService;
private final VersionDependencyService versionDependencyService;

@Autowired
public ProjectService(final ProjectsDAO projectDAO, final HangarUsersDAO hangarUsersDAO, final HangarProjectsDAO hangarProjectsDAO, final ProjectVisibilityService projectVisibilityService, final OrganizationService organizationService, final ProjectPageService projectPageService, final PermissionService permissionService, final PinnedVersionService pinnedVersionService, final VersionsApiDAO versionsApiDAO, final HangarVersionsDAO hangarVersionsDAO, @Lazy final AvatarService avatarService, @Lazy final VersionDependencyService versionDependencyService) {
public ProjectService(final ProjectsDAO projectDAO, final HangarProjectsDAO hangarProjectsDAO, final ProjectVisibilityService projectVisibilityService, final OrganizationService organizationService, final ProjectPageService projectPageService, final PermissionService permissionService, final PinnedVersionService pinnedVersionService, final VersionsApiDAO versionsApiDAO, @Lazy final AvatarService avatarService, @Lazy final VersionDependencyService versionDependencyService) {
this.projectsDAO = projectDAO;
this.hangarUsersDAO = hangarUsersDAO;
this.hangarProjectsDAO = hangarProjectsDAO;
this.projectVisibilityService = projectVisibilityService;
this.organizationService = organizationService;
this.projectPageService = projectPageService;
this.permissionService = permissionService;
this.pinnedVersionService = pinnedVersionService;
this.versionsApiDAO = versionsApiDAO;
this.hangarVersionsDAO = hangarVersionsDAO;
this.avatarService = avatarService;
this.versionDependencyService = versionDependencyService;
}
Expand Down Expand Up @@ -137,9 +131,9 @@ public HangarProject getHangarProject(final ProjectTable projectTable) {
return this.hangarProjectsDAO.getProjectMembers(projectId, hangarUserId, this.permissionService.getProjectPermissions(hangarUserId, projectId).has(Permission.EditProjectSettings));
});

final Map<Platform, HangarVersion> mainChannelVersions = new EnumMap<>(Platform.class);
final Map<Platform, Version> mainChannelVersions = new EnumMap<>(Platform.class);
final CompletableFuture<Void> mainChannelFuture = CompletableFuture.runAsync(() -> Arrays.stream(Platform.getValues()).parallel().forEach(platform -> {
final HangarVersion version = this.getLastVersion(projectTable, platform, this.config.channels.nameDefault());
final Version version = this.getLastVersion(projectTable.getProjectId(), platform, this.config.channels.nameDefault());
if (version != null) {
this.versionDependencyService.addDownloadsAndDependencies(ownerName, projectTable.getSlug(), version.getName(), version.getId()).applyTo(version);
mainChannelVersions.put(platform, version);
Expand Down Expand Up @@ -169,7 +163,7 @@ private <T> CompletableFuture<T> supply(final Supplier<T> supplier) {
return CompletableFuture.supplyAsync(supplier);
}

public @Nullable HangarVersion getLastVersion(final ProjectTable project, final Platform platform, final @Nullable String channel) {
public @Nullable Version getLastVersion(final long projectId, final Platform platform, final @Nullable String channel) {
final RequestPagination pagination = new RequestPagination(1L, 0L);
pagination.getFilters().put("platform", new VersionPlatformFilter.VersionPlatformFilterInstance(new Platform[]{platform}));
if (channel != null) {
Expand All @@ -178,13 +172,13 @@ private <T> CompletableFuture<T> supply(final Supplier<T> supplier) {
}

final Long userId = this.getHangarUserId();
final Long versionId = this.versionsApiDAO.getVersions(project.getId(), false, userId, pagination).keySet().stream().findAny().orElse(null);
final Long versionId = this.versionsApiDAO.getVersions(projectId, false, userId, pagination).keySet().stream().findAny().orElse(null);
if (versionId != null) {
return this.hangarVersionsDAO.getVersion(versionId, this.getGlobalPermissions().has(Permission.SeeHidden), userId);
return this.versionsApiDAO.getVersion(versionId, this.getGlobalPermissions().has(Permission.SeeHidden), userId);
}

// Try again with any channel, else empty
return channel != null ? this.getLastVersion(project, platform, null) : null;
return channel != null ? this.getLastVersion(projectId, platform, null) : null;
}

public void validateSettings(final ProjectSettingsForm settingsForm) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import io.papermc.hangar.model.common.Platform;
import io.papermc.hangar.model.db.PlatformVersionTable;
import io.papermc.hangar.model.db.projects.ProjectTable;
import io.papermc.hangar.model.db.versions.ProjectVersionTable;
import io.papermc.hangar.model.db.versions.dependencies.ProjectVersionDependencyTable;
import io.papermc.hangar.model.db.versions.dependencies.ProjectVersionPlatformDependencyTable;
import io.papermc.hangar.model.internal.api.requests.versions.UpdatePlatformVersions;
Expand Down Expand Up @@ -58,15 +57,6 @@ public VersionDependencyService(final ProjectVersionDependenciesDAO projectVersi
this.downloadService = downloadService;
}

@Cacheable(value = CacheConfig.VERSION_DEPENDENCIES, key = "#p2") // versionId is key
public DownloadsAndDependencies addDownloadsAndDependencies(final ProjectTable project, final ProjectVersionTable version, final long versionId) {
if (project == null) {
throw new HangarApiException(HttpStatus.NOT_FOUND);
}

return this.addDownloadsAndDependencies(project.getOwnerName(), project.getName(), version.getName(), versionId);
}

@Cacheable(value = CacheConfig.VERSION_DEPENDENCIES, key = "#p3") // versionId is key
public DownloadsAndDependencies addDownloadsAndDependencies(final String user, final String project, final String versionName, final long versionId) {
//TODO All of this is dumb and needs to be redone into as little queries as possible
Expand Down
Loading

0 comments on commit 7449487

Please sign in to comment.