Skip to content

Commit 4911dd7

Browse files
authored
Merge pull request #156 from SWU-Elixir/feat/131-achievement-by-user-actions
fix: 총 로그인 수 및 연속 로그인 수 계산 오류 수정
2 parents 993a46c + 18c80d8 commit 4911dd7

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/main/java/BE_Elixir/Elixir/domain/achievement/entity/MemberStats.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import lombok.*;
55
import jakarta.persistence.Id;
66

7+
import java.time.LocalDate;
78
import java.time.LocalDateTime;
89

910
@Entity
@@ -23,6 +24,9 @@ public class MemberStats {
2324

2425
private LocalDateTime updatedAt;
2526

27+
@Column(name = "last_login_date")
28+
private LocalDate lastLoginDate;
29+
2630
@PrePersist
2731
@PreUpdate
2832
public void updateTimestamp() {

src/main/java/BE_Elixir/Elixir/domain/achievement/service/MemberStatsService.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)