优化目录结构

This commit is contained in:
WilliamColton
2025-08-03 01:27:28 +08:00
parent d63081955e
commit c08723574d
222 changed files with 2 additions and 25 deletions

View File

@@ -0,0 +1,90 @@
package com.openisle.service;
import com.openisle.model.User;
import com.openisle.repository.UserRepository;
import com.openisle.repository.ExperienceLogRepository;
import com.openisle.model.ExperienceLog;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
@Service
@RequiredArgsConstructor
public class LevelService {
private final UserRepository userRepository;
// repositories for experience-related entities
private final ExperienceLogRepository experienceLogRepository;
private final UserVisitService userVisitService;
private static final int[] LEVEL_EXP = {100,200,300,600,1200,10000};
private ExperienceLog getTodayLog(User user) {
LocalDate today = LocalDate.now();
return experienceLogRepository.findByUserAndLogDate(user, today)
.orElseGet(() -> {
ExperienceLog log = new ExperienceLog();
log.setUser(user);
log.setLogDate(today);
log.setPostCount(0);
log.setCommentCount(0);
log.setReactionCount(0);
return experienceLogRepository.save(log);
});
}
private int addExperience(User user, int amount) {
user.setExperience(user.getExperience() + amount);
userRepository.save(user);
return amount;
}
public int awardForPost(String username) {
User user = userRepository.findByUsername(username).orElseThrow();
ExperienceLog log = getTodayLog(user);
if (log.getPostCount() > 1) return 0;
log.setPostCount(log.getPostCount() + 1);
experienceLogRepository.save(log);
return addExperience(user,30);
}
public int awardForComment(String username) {
User user = userRepository.findByUsername(username).orElseThrow();
ExperienceLog log = getTodayLog(user);
if (log.getCommentCount() > 3) return 0;
log.setCommentCount(log.getCommentCount() + 1);
experienceLogRepository.save(log);
return addExperience(user,10);
}
public int awardForReaction(String username) {
User user = userRepository.findByUsername(username).orElseThrow();
ExperienceLog log = getTodayLog(user);
if (log.getReactionCount() > 3) return 0;
log.setReactionCount(log.getReactionCount() + 1);
experienceLogRepository.save(log);
return addExperience(user,5);
}
public int awardForSignin(String username) {
boolean first = userVisitService.recordVisit(username);
if (!first) return 0;
User user = userRepository.findByUsername(username).orElseThrow();
return addExperience(user,5);
}
public int getLevel(int exp) {
int level = 0;
for (int t : LEVEL_EXP) {
if (exp >= t) level++; else break;
}
return level;
}
public int nextLevelExp(int exp) {
for (int t : LEVEL_EXP) {
if (exp < t) return t;
}
return LEVEL_EXP[LEVEL_EXP.length-1];
}
}