From d0df698aa94eb3f27937d9dd7d65a0cc3006a208 Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Sun, 10 Aug 2025 00:59:34 +0800 Subject: [PATCH] feat: auto select medals and improve navigation --- .../java/com/openisle/service/MedalService.java | 10 ++++++++++ .../com/openisle/service/MedalServiceTest.java | 3 ++- frontend_nuxt/components/AchievementList.vue | 4 ++-- frontend_nuxt/components/CommentItem.vue | 7 ++++++- frontend_nuxt/pages/posts/[id]/index.vue | 14 ++++++++++++-- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/com/openisle/service/MedalService.java b/backend/src/main/java/com/openisle/service/MedalService.java index f40ceeb00..6a69d4730 100644 --- a/backend/src/main/java/com/openisle/service/MedalService.java +++ b/backend/src/main/java/com/openisle/service/MedalService.java @@ -82,6 +82,16 @@ public class MedalService { } seedUserMedal.setSelected(selected == MedalType.SEED); medals.add(seedUserMedal); + if (user != null && selected == null) { + for (MedalDto medal : medals) { + if (medal.isCompleted()) { + medal.setSelected(true); + user.setDisplayMedal(medal.getType()); + userRepository.save(user); + break; + } + } + } return medals; } diff --git a/backend/src/test/java/com/openisle/service/MedalServiceTest.java b/backend/src/test/java/com/openisle/service/MedalServiceTest.java index bcc8659c3..034979dca 100644 --- a/backend/src/test/java/com/openisle/service/MedalServiceTest.java +++ b/backend/src/test/java/com/openisle/service/MedalServiceTest.java @@ -41,19 +41,20 @@ class MedalServiceTest { User user = new User(); user.setId(1L); user.setCreatedAt(LocalDateTime.of(2025, 9, 15, 0, 0)); - user.setDisplayMedal(MedalType.COMMENT); when(userRepo.findById(1L)).thenReturn(Optional.of(user)); when(userRepo.findByUsername("user")).thenReturn(Optional.of(user)); MedalService service = new MedalService(commentRepo, postRepo, userRepo); List medals = service.getMedals(1L); + assertEquals(MedalType.COMMENT, user.getDisplayMedal()); assertTrue(medals.stream().filter(m -> m.getType() == MedalType.COMMENT).findFirst().orElseThrow().isCompleted()); assertTrue(medals.stream().filter(m -> m.getType() == MedalType.COMMENT).findFirst().orElseThrow().isSelected()); assertFalse(medals.stream().filter(m -> m.getType() == MedalType.POST).findFirst().orElseThrow().isCompleted()); assertFalse(medals.stream().filter(m -> m.getType() == MedalType.POST).findFirst().orElseThrow().isSelected()); assertTrue(medals.stream().filter(m -> m.getType() == MedalType.SEED).findFirst().orElseThrow().isCompleted()); assertFalse(medals.stream().filter(m -> m.getType() == MedalType.SEED).findFirst().orElseThrow().isSelected()); + verify(userRepo).save(user); } @Test diff --git a/frontend_nuxt/components/AchievementList.vue b/frontend_nuxt/components/AchievementList.vue index aefc7bbdf..1559d567e 100644 --- a/frontend_nuxt/components/AchievementList.vue +++ b/frontend_nuxt/components/AchievementList.vue @@ -3,7 +3,7 @@
-
展示
+
展示
{{ medal.title }}
{{ medal.description }} diff --git a/frontend_nuxt/components/CommentItem.vue b/frontend_nuxt/components/CommentItem.vue index 54d1ceb28..e6f130105 100644 --- a/frontend_nuxt/components/CommentItem.vue +++ b/frontend_nuxt/components/CommentItem.vue @@ -11,7 +11,11 @@
{{ comment.userName }} - {{ getMedalTitle(comment.medal) }} + {{ getMedalTitle(comment.medal) }} {{ comment.parentUserName }} @@ -289,6 +293,7 @@ export default CommentItem font-size: 12px; margin-left: 4px; opacity: 0.6; + cursor: pointer; } @keyframes highlight { diff --git a/frontend_nuxt/pages/posts/[id]/index.vue b/frontend_nuxt/pages/posts/[id]/index.vue index 67060b041..8cee34217 100644 --- a/frontend_nuxt/pages/posts/[id]/index.vue +++ b/frontend_nuxt/pages/posts/[id]/index.vue @@ -43,7 +43,11 @@
{{ author.username }} - {{ getMedalTitle(author.displayMedal) }} + {{ getMedalTitle(author.displayMedal) }}
{{ postTime }}
@@ -53,7 +57,11 @@
{{ author.username }} - {{ getMedalTitle(author.displayMedal) }} + {{ getMedalTitle(author.displayMedal) }}
{{ postTime }}
@@ -236,6 +244,7 @@ export default { id: c.id, userName: c.author.username, medal: c.author.displayMedal, + userId: c.author.id, time: TimeManager.format(c.createdAt), avatar: c.author.avatar, text: c.content, @@ -940,6 +949,7 @@ export default { font-size: 12px; margin-left: 4px; opacity: 0.6; + cursor: pointer; } .post-time {