From 33b2734ba5834564fc33daf60986d8b99c867e84 Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Sun, 10 Aug 2025 01:15:02 +0800 Subject: [PATCH] feat: auto select medal for user in mappers --- .../java/com/openisle/mapper/UserMapper.java | 3 +++ .../java/com/openisle/service/MedalService.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/backend/src/main/java/com/openisle/mapper/UserMapper.java b/backend/src/main/java/com/openisle/mapper/UserMapper.java index 6e9cfef0e..e96c64a11 100644 --- a/backend/src/main/java/com/openisle/mapper/UserMapper.java +++ b/backend/src/main/java/com/openisle/mapper/UserMapper.java @@ -22,11 +22,13 @@ public class UserMapper { private final UserVisitService userVisitService; private final PostReadService postReadService; private final LevelService levelService; + private final MedalService medalService; @Value("${app.snippet-length:50}") private int snippetLength; public AuthorDto toAuthorDto(User user) { + medalService.ensureDisplayMedal(user); AuthorDto dto = new AuthorDto(); dto.setId(user.getId()); dto.setUsername(user.getUsername()); @@ -36,6 +38,7 @@ public class UserMapper { } public UserDto toDto(User user, Authentication viewer) { + medalService.ensureDisplayMedal(user); UserDto dto = new UserDto(); dto.setId(user.getId()); dto.setUsername(user.getUsername()); diff --git a/backend/src/main/java/com/openisle/service/MedalService.java b/backend/src/main/java/com/openisle/service/MedalService.java index 6a69d4730..05fd14754 100644 --- a/backend/src/main/java/com/openisle/service/MedalService.java +++ b/backend/src/main/java/com/openisle/service/MedalService.java @@ -96,6 +96,22 @@ public class MedalService { return medals; } + public void ensureDisplayMedal(User user) { + if (user == null || user.getDisplayMedal() != null) { + return; + } + if (commentRepository.countByAuthor_Id(user.getId()) >= COMMENT_TARGET) { + user.setDisplayMedal(MedalType.COMMENT); + } else if (postRepository.countByAuthor_Id(user.getId()) >= POST_TARGET) { + user.setDisplayMedal(MedalType.POST); + } else if (user.getCreatedAt().isBefore(SEED_USER_DEADLINE)) { + user.setDisplayMedal(MedalType.SEED); + } + if (user.getDisplayMedal() != null) { + userRepository.save(user); + } + } + public void selectMedal(String username, MedalType type) { User user = userRepository.findByUsername(username).orElseThrow(); boolean completed = getMedals(user.getId()).stream()