feat: auto select medal for user in mappers

This commit is contained in:
Tim
2025-08-10 01:15:02 +08:00
parent b58a5d975c
commit 33b2734ba5
2 changed files with 19 additions and 0 deletions

View File

@@ -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());

View File

@@ -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()