@@ -21,9 +21,13 @@ public class MemberStatsService {
2121 public void increaseStat (Long memberId , AchievementType type , int amount ) {
2222 MemberStats stats = memberStatsRepository .findById (memberId )
2323 .orElseGet (() -> createDefaultStats (memberId ));
24-
24+ LocalDate today = LocalDate . now ();
2525 switch (type ) {
26- case TOTAL_LOGIN_DAYS -> stats .setTotalLoginDays (stats .getTotalLoginDays () + amount );
26+ case TOTAL_LOGIN_DAYS -> {
27+ if (!today .equals (stats .getLastLoginDate ())) {
28+ stats .setTotalLoginDays (stats .getTotalLoginDays () + 1 );
29+ }
30+ }
2731 case CONSECUTIVE_LOGIN_DAYS -> updateConsecutiveLogin (stats );
2832 case TOTAL_DIET_LOGS -> stats .setTotalDietLogs (stats .getTotalDietLogs () + amount );
2933 case TOTAL_RECIPE_LOGS -> stats .setTotalRecipeLogs (stats .getTotalRecipeLogs () + amount );
@@ -44,18 +48,21 @@ public void increaseStat(Long memberId, AchievementType type, int amount) {
4448 // 연속 로그인 일수
4549 private void updateConsecutiveLogin (MemberStats stats ) {
4650 LocalDate today = LocalDate .now ();
47- LocalDate lastUpdated = stats .getUpdatedAt () != null
48- ? stats .getUpdatedAt ().toLocalDate ()
49- : null ;
51+ LocalDate lastLoginDate = stats .getLastLoginDate ();
5052
51- if (lastUpdated == null || lastUpdated .isBefore (today .minusDays (1 ))) {
52- // 어제보다 이전이면 리셋
53+ if (lastLoginDate == null || lastLoginDate .isBefore (today .minusDays (1 ))) {
54+ // 마지막 로그인일이 2일 이상 전이면 연속 로그인 리셋
5355 stats .setConsecutiveLoginDays (1 );
54- } else if (lastUpdated .equals (today .minusDays (1 ))) {
55- // 어제 접속 → 연속 증가
56+ } else if (lastLoginDate .equals (today .minusDays (1 ))) {
57+ // 어제 접속, 연속 로그인 성공
5658 stats .setConsecutiveLoginDays (stats .getConsecutiveLoginDays () + 1 );
59+ } else if (lastLoginDate .equals (today )) {
60+ // 이미 오늘 접속, 중복 증가 방지
61+ return ;
5762 }
58- // 오늘 이미 업데이트된 경우는 무시 (중복 증가 방지)
63+
64+ // 마지막 로그인일 갱신
65+ stats .setLastLoginDate (today );
5966 }
6067
6168
0 commit comments