Skip to content

Commit 897d5c4

Browse files
authored
Merge pull request #123 from Nexters/fix-96
[fix] 리워드 레드돗 로직 수정
2 parents 8694894 + 42dcb1d commit 897d5c4

File tree

7 files changed

+24
-65
lines changed

7 files changed

+24
-65
lines changed

.github/workflows/cd.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
5252
#test를 제외한 프로젝트 빌드
5353
- name: Build With Gradle
54-
run: ./gradlew build -x test
54+
run: ./gradlew clean build -x test --no-build-cache
5555

5656
- name: Set up Docker Build
5757
uses: docker/setup-buildx-action@v2

.github/workflows/ci.yml

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,6 @@ jobs:
4545
java-version: '17'
4646
distribution: 'temurin'
4747

48-
# Gradle 캐싱
49-
- name: Gradle Caching
50-
uses: actions/cache@v3
51-
with:
52-
path: |
53-
~/.gradle/caches
54-
~/.gradle/wrapper
55-
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
56-
restore-keys: |
57-
${{ runner.os }}-gradle-
58-
5948
# CI
6049
- name: Grant Execute Permission For Gradlew
6150
run: chmod +x gradlew
@@ -71,13 +60,15 @@ jobs:
7160
echo "${{ secrets.PROPERTIES_TEST }}" > ./application-test.properties
7261
shell: bash
7362

63+
- name: Show dependencies
64+
run: ./gradlew dependencies --configuration runtimeClasspath
65+
7466
# 테스트를 제외한 프로젝트 빌드
7567
- name: Build With Gradle
76-
run: ./gradlew build -x test
68+
run: ./gradlew clean build -x test --no-build-cache
7769

78-
# 테스트 실행
7970
- name: Build With Test
80-
run: ./gradlew test
71+
run: ./gradlew test --no-build-cache
8172

8273
# 테스트 결과 파일 생성
8374
- name: Publish Unit Test Results

src/main/java/donmani/donmani_server/expense/service/ExpenseService.java

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -139,31 +139,6 @@ private List<RecordDTO> expenseToDto(List<Expense> expenses, boolean sortedDesc)
139139
.sorted(sortedDesc ? Comparator.comparing(RecordDTO::getDate).reversed() : Comparator.comparing(RecordDTO::getDate))
140140
.collect(Collectors.toList());
141141
}
142-
// 미사용
143-
@Transactional(readOnly = true)
144-
public ExpenseResponseDTO getAllExpenses(String userKey, int page) {
145-
Long userId = userService.getUserIdByUserKey(userKey);
146-
147-
if (userId == null) {
148-
throw new EntityNotFoundException("유저 정보를 찾을 수 없습니다.");
149-
}
150-
151-
// 시간순 정렬 20개
152-
Page<LocalDateTime> localDateTimes = expenseRepository.findDistinctCreatedAt(userId, PageRequest.of(page, SIZE));
153-
if (localDateTimes.isEmpty()) {
154-
return ExpenseResponseDTO.builder()
155-
.userKey(userKey)
156-
.records(null)
157-
.build();
158-
}
159-
160-
List<Expense> expenses = expenseRepository.findByCreatedAtIn(userId, localDateTimes.getContent());
161-
162-
return ExpenseResponseDTO.builder()
163-
.userKey(userKey)
164-
.records(expenseToDto(expenses, true))
165-
.build();
166-
}
167142

168143
@Transactional(readOnly = true)
169144
public ExpenseSummaryDTO getYearlyExpenseSummary(String userKey, int year) {
@@ -256,7 +231,7 @@ public Integer getTotalExpensesCount(String userKey) {
256231

257232
// 오늘 기록된 소비 확인
258233
// ver 2.0.0 이후로 기록된 소비만
259-
LocalDateTime baseTime = LocalDateTime.of(2025, 5, 26, 0, 0); // 2025-05-30 00:00
234+
LocalDateTime baseTime = LocalDateTime.of(2025, 7, 18, 0, 0); // 2025-07-18 00:00
260235

261236
List<LocalDateTime> createdAts = expenseRepository.findTotalExpensesCount(user.getId());
262237

@@ -267,8 +242,4 @@ public Integer getTotalExpensesCount(String userKey) {
267242

268243
return createdAts == null || createdAts.isEmpty() ? 0 : createdAts.size();
269244
}
270-
271-
public Expense getExpense(Long id) {
272-
return expenseRepository.findExpenseById(id);
273-
}
274245
}

src/main/java/donmani/donmani_server/feedback/service/FeedbackService.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package donmani.donmani_server.feedback.service;
22

33
import java.time.LocalDateTime;
4-
import java.time.YearMonth;
54
import java.time.ZoneId;
65
import java.time.format.DateTimeFormatter;
76
import java.util.List;
87
import java.util.Random;
9-
import java.util.Set;
108
import java.util.stream.Collectors;
119

1210
import donmani.donmani_server.expense.entity.CategoryType;
@@ -18,15 +16,13 @@
1816

1917
import donmani.donmani_server.expense.dto.ExpenseRequestDTO;
2018
import donmani.donmani_server.expense.entity.Expense;
21-
import donmani.donmani_server.expense.service.ExpenseService;
2219
import donmani.donmani_server.feedback.dto.FeedbackOpenResponseDTO;
2320
import donmani.donmani_server.feedback.provider.FeedbackTemplate;
2421
import donmani.donmani_server.feedback.provider.FeedbackTemplateProvider;
2522
import donmani.donmani_server.user.entity.User;
2623
import donmani.donmani_server.user.service.UserService;
2724
import donmani.donmani_server.feedback.entity.Feedback;
2825
import donmani.donmani_server.feedback.repository.FeedbackRepository;
29-
import jakarta.persistence.EntityNotFoundException;
3026
import lombok.RequiredArgsConstructor;
3127

3228
@Service
@@ -49,7 +45,7 @@ public void addFeedback(ExpenseRequestDTO requestDTO) {
4945
// 오늘 기록된 소비 확인
5046
// ver 2.0.0 이후로 기록된 소비만
5147
LocalDateTime createdAt = requestDTO.getRecords().get(0).getDate().atStartOfDay(); // 실제 생성일자말고 사용자가 기록하려는 일자
52-
LocalDateTime baseTime = LocalDateTime.of(2025, 5, 26, 0, 0); // 2025-05-30 00:00
48+
LocalDateTime baseTime = LocalDateTime.of(2025, 7, 18, 0, 0); // 2025-07-18 00:00
5349

5450
// 획득한 피드백 카드가 12개 이상 -> 피드백 카드를 생성하지 않음
5551
List<Feedback> feedbacks = feedbackRepository.findFeedbacksByUserId(user.getId());

src/main/java/donmani/donmani_server/user/controller/UserController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,10 @@ public ResponseEntity<RewardCheckDTO> getRewardCheckedStatus(@PathVariable Strin
128128
return ResponseEntity.ok(rewardStatus);
129129
}
130130

131+
// 미사용 추후 삭제
131132
@PutMapping("api/v1/reward/status/{userKey}")
132133
public ResponseEntity<Void> markRewardAsChecked(@PathVariable String userKey) {
133-
userService.markRewardAsChecked(userKey);
134+
134135
return ResponseEntity.ok().build();
135136
}
136137
}

src/main/java/donmani/donmani_server/user/entity/User.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ public class User {
4646

4747
private boolean isNoticeEnable;
4848

49+
// 미사용
4950
private boolean isRewardChecked;
51+
5052
/*
5153
- 2025.05.25
5254
- feedback 양방향 연관 관계 추가

src/main/java/donmani/donmani_server/user/service/UserService.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import java.time.LocalDateTime;
44
import java.time.ZoneId;
5+
import java.util.List;
56
import java.util.Optional;
67

78
import donmani.donmani_server.expense.dto.NoticeReadDTO;
89
import donmani.donmani_server.reward.dto.RewardCheckDTO;
10+
import donmani.donmani_server.reward.entity.UserItem;
11+
import donmani.donmani_server.reward.repository.UserItemRepository;
912
import donmani.donmani_server.user.dto.UserRegisterResponseDTO;
1013
import donmani.donmani_server.user.dto.UpdateUsernameResponseDTO;
1114
import donmani.donmani_server.user.dto.UserRegisterResponseDTOV1;
@@ -22,6 +25,7 @@
2225
public class UserService {
2326

2427
private final UserRepository userRepository;
28+
private final UserItemRepository userItemRepository;
2529

2630
@Transactional
2731
public UserRegisterResponseDTO registerUser(String userKey) {
@@ -161,25 +165,19 @@ public User getUser(String userKey) {
161165
return user;
162166
}
163167

164-
165-
@Transactional
166-
public void markRewardAsChecked(String userKey) {
167-
LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
168-
168+
@Transactional(readOnly = true)
169+
public RewardCheckDTO getRewardCheckedStatus(String userKey) {
169170
User user = userRepository.findByUserKey(userKey)
170171
.orElseThrow(() -> new IllegalArgumentException("User not found"));
171172

172-
user.setRewardChecked(true); // 공지사항 읽음 처리
173-
user.setUpdateDate(localDateTime);
173+
ZoneId zoneId = ZoneId.of("Asia/Seoul");
174+
LocalDateTime threeDaysAgo = LocalDateTime.now(zoneId).minusDays(3);
174175

175-
userRepository.save(user);
176-
}
176+
List<UserItem> acquiredItems = userItemRepository.findByUserOrderByAcquiredAtDesc(user);
177177

178-
@Transactional(readOnly = true)
179-
public RewardCheckDTO getRewardCheckedStatus(String userKey) {
180-
User user = userRepository.findByUserKey(userKey)
181-
.orElseThrow(() -> new IllegalArgumentException("User not found"));
178+
boolean isRewardChecked = acquiredItems.stream()
179+
.anyMatch(item -> item.getAcquiredAt().isAfter(threeDaysAgo));
182180

183-
return RewardCheckDTO.builder().checked(user.isRewardChecked()).build(); // 읽음 여부 반환
181+
return RewardCheckDTO.builder().checked(isRewardChecked).build();
184182
}
185183
}

0 commit comments

Comments
 (0)