Skip to content

Commit f2f7ba4

Browse files
authored
Merge pull request #80 from Nexters/dev
Dev
2 parents 2510b32 + 8814684 commit f2f7ba4

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

src/main/java/donmani/donmani_server/expense/dto/ExpenseResponseDTO.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ public class ExpenseResponseDTO {
1818
private String userKey;
1919
private List<RecordDTO> records;
2020
private List<RewardItemResponseDTO> saveItems;
21+
private boolean hasNotOpenedRewards;
2122
}

src/main/java/donmani/donmani_server/expense/repository/ExpenseRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public interface ExpenseRepository extends JpaRepository<Expense, Long> {
2828
Expense findExpenseByUserIdAndAndCreatedAt(Long userId, LocalDateTime date);
2929

3030
// @Query("SELECT DISTINCT e.createdAt FROM Expense e WHERE DATE_FORMAT(e.createdAt, '%Y%m%d') >= DATE_FORMAT('20250525', '%Y%m%d') AND e.userId = :userId")
31-
@Query("SELECT DISTINCT e.createdAt FROM Expense e WHERE e.userId = :userId")
31+
@Query("SELECT DISTINCT e.createdAt FROM Expense e JOIN Feedback f ON e.feedback.id = f.id WHERE e.userId = :userId")
3232
List<LocalDateTime> findTotalExpensesCount(Long userId);
3333

3434
Expense findExpenseById(Long id);

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void addExpense(ExpenseRequestDTO request) {
8181
}
8282

8383

84-
@Transactional(readOnly = true)
84+
@Transactional
8585
public ExpenseResponseDTO getExpenses(String userKey, int year, int month, boolean sortedDesc) {
8686
Long userId = userService.getUserIdByUserKey(userKey);
8787

@@ -92,17 +92,22 @@ public ExpenseResponseDTO getExpenses(String userKey, int year, int month, boole
9292
// userId와 year, month로 직접 expense를 조회
9393
List<Expense> expenses = expenseRepository.findByUserIdAndMonth(userId, year, month);
9494

95+
// 오픈하지 않은 선물 여부 확인
96+
boolean hasNotOpenedRewards = rewardService.hasNotOpenedRewards(userKey);
97+
9598
if(expenses.isEmpty()) {
9699
return ExpenseResponseDTO.builder()
97100
.userKey(userKey)
98101
.records(null)
102+
.hasNotOpenedRewards(hasNotOpenedRewards)
99103
.build();
100104
}
101105

102106
return ExpenseResponseDTO.builder()
103107
.userKey(userKey)
104108
.records(expenseToDto(expenses, sortedDesc))
105-
.saveItems(rewardService.getSavedItem(userKey, year, month))
109+
.saveItems(rewardService.getSavedItem(userKey, year, month))
110+
.hasNotOpenedRewards(hasNotOpenedRewards)
106111
.build();
107112
}
108113

src/main/java/donmani/donmani_server/reward/service/RewardService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,4 +324,22 @@ private UserItem makeUserItem(User user, RewardItem item) {
324324
.acquiredAt(LocalDateTime.now())
325325
.isOpened(true).build();
326326
}
327+
328+
/**
329+
* 오픈하지 않은 선물 여부 확인
330+
* @param userKey
331+
* @return boolean
332+
*/
333+
@Transactional(readOnly = true)
334+
public boolean hasNotOpenedRewards(String userKey) {
335+
User user = userRepository.findByUserKey(userKey)
336+
.orElseThrow(() -> new RuntimeException("USER NOT FOUND"));
337+
338+
LocalDateTime start = YearMonth.now().atDay(1).atStartOfDay();
339+
LocalDateTime end = start.plusMonths(1).minusNanos(1); // 23:59:59.999999999
340+
341+
List<UserItem> notOpenedItems = userItemRepository.findByUserAndAcquiredAtBetweenAndNotOpened(user, start, end);
342+
343+
return notOpenedItems == null || notOpenedItems.isEmpty() ? false : true;
344+
}
327345
}

0 commit comments

Comments
 (0)