From 58e25b900b98788499415ef5f20b310716a91101 Mon Sep 17 00:00:00 2001 From: KennyTV Date: Fri, 21 Aug 2020 11:55:47 +0200 Subject: [PATCH] versionsLog, fix activity view --- .../hangar/controller/VersionsController.java | 10 +- .../hangar/db/dao/VisibilityDao.java | 19 ++-- .../minidigger/hangar/model/Visibility.java | 4 +- .../hangar/service/VersionService.java | 16 +-- .../channels/helper/popoverColorPicker.ftlh | 5 +- .../templates/projects/versions/log.ftlh | 98 +++++++++---------- .../templates/users/admin/activity.ftlh | 4 +- 7 files changed, 80 insertions(+), 76 deletions(-) diff --git a/src/main/java/me/minidigger/hangar/controller/VersionsController.java b/src/main/java/me/minidigger/hangar/controller/VersionsController.java index 369465cf4..950dc4eab 100644 --- a/src/main/java/me/minidigger/hangar/controller/VersionsController.java +++ b/src/main/java/me/minidigger/hangar/controller/VersionsController.java @@ -90,8 +90,14 @@ public class VersionsController extends HangarController { } @RequestMapping("/{author}/{slug}/versionLog") - public Object showLog(@PathVariable Object author, @PathVariable Object slug, @RequestParam Object versionString) { - return null; // TODO implement showLog request controller + public ModelAndView showLog(@PathVariable String author, @PathVariable String slug, @RequestParam String versionString) { + ModelAndView mv = new ModelAndView("projects/versions/log"); + ProjectData projectData = projectService.getProjectData(author, slug); + ProjectVersionsTable version = versionService.getVersion(projectData.getProject().getId(), versionString); + mv.addObject("project", projectData); + mv.addObject("version", version); + mv.addObject("visibilityChanges", versionService.getVersionVisibilityChanges(version.getId())); + return fillModel(mv); } @GetMapping("/{author}/{slug}/versions") diff --git a/src/main/java/me/minidigger/hangar/db/dao/VisibilityDao.java b/src/main/java/me/minidigger/hangar/db/dao/VisibilityDao.java index d724729f9..b992cfb69 100644 --- a/src/main/java/me/minidigger/hangar/db/dao/VisibilityDao.java +++ b/src/main/java/me/minidigger/hangar/db/dao/VisibilityDao.java @@ -2,9 +2,9 @@ package me.minidigger.hangar.db.dao; import me.minidigger.hangar.db.model.ProjectVersionVisibilityChangesTable; import me.minidigger.hangar.db.model.ProjectVisibilityChangesTable; -import org.checkerframework.checker.units.qual.Time; import org.jdbi.v3.sqlobject.config.KeyColumn; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; +import org.jdbi.v3.sqlobject.config.ValueColumn; import org.jdbi.v3.sqlobject.customizer.BindBean; import org.jdbi.v3.sqlobject.customizer.Timestamped; import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys; @@ -28,16 +28,21 @@ public interface VisibilityDao { @Timestamped @GetGeneratedKeys @SqlUpdate("INSERT INTO project_version_visibility_changes (created_at, created_by, version_id, comment, resolved_at, resolved_by, visibility) " + - "VALUES (:now, :createdBy, :versionId, :comment, :resolvedAt, :resolvedBy, :visibility)") + "VALUES (:now, :createdBy, :versionId, :comment, :resolvedAt, :resolvedBy, :visibility)") ProjectVersionVisibilityChangesTable insert(@BindBean ProjectVersionVisibilityChangesTable projectVersionVisibilityChangesTable); - @SqlUpdate("UPDATE project_visibility_changes SET resolved_at = :resolvedAt, resolved_by = :resolvedBy") // I think these are the only two things that change after the fact + @SqlUpdate("UPDATE project_visibility_changes SET resolved_at = :resolvedAt, resolved_by = :resolvedBy") + // I think these are the only two things that change after the fact void update(@BindBean ProjectVisibilityChangesTable projectVisibilityChangesTable); @KeyColumn("user_name") @SqlQuery("SELECT pvc.*, u.name user_name FROM project_visibility_changes pvc LEFT OUTER JOIN users u ON pvc.created_by = u.id WHERE project_id = :projectId ORDER BY created_at DESC LIMIT 1") Map.Entry getLatestProjectVisibilityChange(long projectId); + @ValueColumn("user_name") + @SqlQuery("SELECT pvc.*, u.name user_name FROM project_version_visibility_changes pvc RIGHT OUTER JOIN users u ON pvc.created_by = u.id WHERE version_id = :versionId ORDER BY created_at") + Map getProjectVersionVisibilityChanges(long versionId); + @Timestamped @SqlUpdate("UPDATE project_visibility_changes " + "SET resolved_at = :now, resolved_by = :userId " + @@ -48,10 +53,10 @@ public interface VisibilityDao { @Timestamped @SqlUpdate("UPDATE project_version_visibility_changes " + - "SET resolved_at = :now, resolved_by = :userId " + - "FROM" + - " (SELECT version_id FROM project_version_visibility_changes WHERE version_id = :versionId AND resolved_at IS NULL AND resolved_by IS NULL ORDER BY created_at LIMIT 1) as subquery " + - "WHERE project_version_visibility_changes.version_id = subquery.version_id") + "SET resolved_at = :now, resolved_by = :userId " + + "FROM" + + " (SELECT version_id FROM project_version_visibility_changes WHERE version_id = :versionId AND resolved_at IS NULL AND resolved_by IS NULL ORDER BY created_at LIMIT 1) as subquery " + + "WHERE project_version_visibility_changes.version_id = subquery.version_id") void updateLatestVersionChange(long userId, long versionId); } diff --git a/src/main/java/me/minidigger/hangar/model/Visibility.java b/src/main/java/me/minidigger/hangar/model/Visibility.java index 146146be9..ddf5137cd 100644 --- a/src/main/java/me/minidigger/hangar/model/Visibility.java +++ b/src/main/java/me/minidigger/hangar/model/Visibility.java @@ -45,13 +45,13 @@ public enum Visibility { @Override @JsonValue public String toString() { - return String.valueOf(name); + return name; } @JsonCreator public static Visibility fromValue(String text) { for (Visibility b : Visibility.values()) { - if (String.valueOf(b.name).equals(text)) { + if (b.name.equals(text)) { return b; } } diff --git a/src/main/java/me/minidigger/hangar/service/VersionService.java b/src/main/java/me/minidigger/hangar/service/VersionService.java index 556e9211c..a71335562 100644 --- a/src/main/java/me/minidigger/hangar/service/VersionService.java +++ b/src/main/java/me/minidigger/hangar/service/VersionService.java @@ -1,10 +1,13 @@ package me.minidigger.hangar.service; +import me.minidigger.hangar.db.dao.HangarDao; import me.minidigger.hangar.db.dao.ProjectDao; +import me.minidigger.hangar.db.dao.ProjectVersionDao; import me.minidigger.hangar.db.dao.VisibilityDao; import me.minidigger.hangar.db.model.ProjectChannelsTable; import me.minidigger.hangar.db.model.ProjectVersionTagsTable; import me.minidigger.hangar.db.model.ProjectVersionVisibilityChangesTable; +import me.minidigger.hangar.db.model.ProjectVersionsTable; import me.minidigger.hangar.db.model.ProjectsTable; import me.minidigger.hangar.model.TagColor; import me.minidigger.hangar.model.Visibility; @@ -21,10 +24,6 @@ import me.minidigger.hangar.util.HangarException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import me.minidigger.hangar.db.dao.HangarDao; -import me.minidigger.hangar.db.dao.ProjectVersionDao; -import me.minidigger.hangar.db.model.ProjectVersionsTable; - import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,7 +49,7 @@ public class VersionService { } public ProjectVersionsTable getVersion(long projectId, String versionString) { - return versionDao.get().getProjectVersion(projectId,"", versionString); + return versionDao.get().getProjectVersion(projectId, "", versionString); } public ProjectVersionsTable getVersion(String author, String slug, String versionString) { @@ -112,8 +111,7 @@ public class VersionService { UserData approveUser = userService.getUserData(projectVersion.getReviewerId()); if (approveUser == null) { approvedBy = "Unknown"; - } - else { + } else { approvedBy = approveUser.getUser().getName(); } } @@ -130,4 +128,8 @@ public class VersionService { dependencies ); } + + public Map getVersionVisibilityChanges(long versionId) { + return visibilityDao.get().getProjectVersionVisibilityChanges(versionId); + } } diff --git a/src/main/resources/templates/projects/channels/helper/popoverColorPicker.ftlh b/src/main/resources/templates/projects/channels/helper/popoverColorPicker.ftlh index fa07bce9f..fcac4ef1a 100644 --- a/src/main/resources/templates/projects/channels/helper/popoverColorPicker.ftlh +++ b/src/main/resources/templates/projects/channels/helper/popoverColorPicker.ftlh @@ -7,7 +7,7 @@ - + @@ -49,5 +49,4 @@ - - + \ No newline at end of file diff --git a/src/main/resources/templates/projects/versions/log.ftlh b/src/main/resources/templates/projects/versions/log.ftlh index a4435d3f2..b2aaad24b 100644 --- a/src/main/resources/templates/projects/versions/log.ftlh +++ b/src/main/resources/templates/projects/versions/log.ftlh @@ -2,60 +2,52 @@ <#import "*/utils/hangar.ftlh" as hangar /> <#import "*/layout/base.ftlh" as base /> -@import controllers.sugar.Requests.OreRequest -@import ore.OreConfig -@import ore.db.Model -@import ore.markdown.MarkdownRenderer -@import ore.models.admin.VersionVisibilityChange -@import ore.models.project.{Project, Version} -@import ore.models.user.User -@import util.StringFormatterUtils._ -@import util.syntax._ - -@(project: Project, version: Version, visibilityChanges: Seq[(Model[VersionVisibilityChange], Option[User])])(implicit messages: Messages, request: OreRequest[_], config: OreConfig, flash: Flash, renderer: MarkdownRenderer, assetsFinder: AssetsFinder) - <#assign message><@spring.messageArgs "version.log.logger.title" project.namespace /> <@base.base title=message> -
-
-

<@spring.message "version.log.visibility.title" /> ${project.ownerName}/${project.slug}/versions/${version.versionString}

-
-
-
-
-
-
-

<@spring.message "version.log.visibility.title" />

-
-
- - - - - - - - - - - <#if visibilityChanges.isEmpty> - - - @visibilityChanges.reverse.map { case (entry, createdBy) => - - - - - <#if createdBy??> - - <#else> - +
+
+

<@spring.message "version.log.visibility.title" /> ${project.project.name} + /${project.project.slug}/versions/${version.versionString}

+
+
+
+
+
+
+

<@spring.message "version.log.visibility.title" />

+
+
+
StateTimeCommentSet by
No entries founds
${entry.visibility}${entry.createdAt?string.long}${entry.obj.render}${createdBy.name}Unknown
+ + + + + + + + + + <#if !visibilityChanges?has_content> + + + + + <#list visibilityChanges as entry, createdBy> + + + + + <#if createdBy??> + + <#else> + - - } - -
StateTimeCommentSet by
No entries founds
${entry.visibility}${utils.prettifyDateTime(entry.createdAt)}${markdownService.render(entry.comment)}${createdBy}Unknown
-
-
-
+ + + + + + + diff --git a/src/main/resources/templates/users/admin/activity.ftlh b/src/main/resources/templates/users/admin/activity.ftlh index 02ceef44f..1e6699236 100644 --- a/src/main/resources/templates/users/admin/activity.ftlh +++ b/src/main/resources/templates/users/admin/activity.ftlh @@ -29,7 +29,7 @@ <#if activity.class.simpleName == "ReviewActivity"> Review approved - ${utils.prettifyDateTime(activity.endedAt!OffsetDateTime.MIN))} + ${utils.prettifyDateTime(activity.endedAt!OffsetDateTime.MIN)} for: ${activity.getProject().getOwner()} / ${activity.getProject().getSlug()} @@ -39,7 +39,7 @@ <#elseif activity.class.simpleName = "FlagActivity"> Flag resolved - ${utils.prettifyDateTime(activity.resolvedAt!OffsetDateTime.MIN))} <#--TODO: activity end datetime needs to be moved to abstract Activity--> + ${utils.prettifyDateTime(activity.resolvedAt!OffsetDateTime.MIN)} <#--TODO: activity end datetime needs to be moved to abstract Activity--> for: ${activity.getProject().getOwner()} / ${activity.getProject().getSlug()}