Skip to content

Commit f7de6cc

Browse files
authored
Merge pull request #118 from Nexters/fix-96
[hotfix] 히든 아이템 바텀시트/새로 획득한 아이템 flag 로직 수정
2 parents 2547aa8 + f4a8d65 commit f7de6cc

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

src/main/java/donmani/donmani_server/reward/dto/RewardItemResponseDTO.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class RewardItemResponseDTO {
2525
private RewardCategory category;
2626
private boolean isHidden;
2727
private boolean newAcquiredFlag;
28+
private boolean isHiddenRead;
2829

2930
// 가지고 있는 아이템들만 보여줄 때 사용
3031
public static RewardItemResponseDTO of(RewardItem rewardItem) {
@@ -52,7 +53,7 @@ public static RewardItemResponseDTO of(RewardItem rewardItem) {
5253
return response;
5354
}
5455

55-
public static RewardItemResponseDTO of(RewardItem rewardItem, boolean newAcquiredFlag) {
56+
public static RewardItemResponseDTO of(RewardItem rewardItem, boolean newAcquiredFlag, boolean isHiddenRead) {
5657
RewardItemResponseDTO response = new RewardItemResponseDTO();
5758

5859
String prefix = "https://kr.object.ncloudstorage.com/donmani.bucket/reward_content/";
@@ -74,6 +75,7 @@ public static RewardItemResponseDTO of(RewardItem rewardItem, boolean newAcquire
7475
response.setCategory(rewardItem.getCategory());
7576
response.setHidden(rewardItem.isHidden());
7677
response.setNewAcquiredFlag(newAcquiredFlag);
78+
if (rewardItem.isHidden()) response.setHiddenRead(isHiddenRead);
7779

7880
return response;
7981
}

src/main/java/donmani/donmani_server/reward/repository/UserItemRepository.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,7 @@ List<UserItem> findAllByUser(
3535
@Query("SELECT ui FROM UserItem ui " +
3636
"JOIN ui.item i " +
3737
"WHERE ui.user = :user " +
38-
"AND FUNCTION('YEAR', ui.acquiredAt) = :year " +
39-
"AND FUNCTION('MONTH', ui.acquiredAt) = :month " +
4038
"AND ui.isOpened = false " +
4139
"AND i.isHidden = true")
42-
Optional<UserItem> findOneUnopenedHiddenItem(@Param("user") User user,
43-
@Param("year") int year,
44-
@Param("month") int month);
40+
Optional<UserItem> findOneUnopenedHiddenItem(@Param("user") User user);
4541
}

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,15 @@ private void acquireHiddenItems(User user) {
132132
List<UserItem> acquiredItems = userItemRepository.findAllByUser(user);
133133
if(acquiredItems.size() == MAX_REWARD) {
134134
RewardItem hiddenItem = rewardItemRepository.findFirstByHiddenTrue().orElseThrow();
135+
136+
// 히든 아이템 획득 시 isOpened 값을 활용하여 isHiddenRead 값을 판별
137+
boolean isHiddenRead = false;
138+
135139
UserItem newUserItem = UserItem.builder()
136140
.user(user)
137141
.item(hiddenItem)
138142
.acquiredAt(LocalDateTime.now(ZoneId.of("Asia/Seoul")))
139-
.isOpened(true)
143+
.isOpened(isHiddenRead)
140144
.build();
141145
userItemRepository.save(newUserItem);
142146
}
@@ -165,21 +169,22 @@ public Map<RewardCategory, List<RewardItemResponseDTO>> getAcquiredItem(String u
165169
// 기본 아이템들을 DTO로 변환
166170
List<RewardItemResponseDTO> response = defaultItemIds.stream()
167171
.map(id -> rewardItemRepository.findById(id)
168-
.map(item -> RewardItemResponseDTO.of(item, false))
172+
.map(item -> RewardItemResponseDTO.of(item, false, false))
169173
.orElseThrow(() -> new RuntimeException("Default item ID " + id + " not found")))
170174
.collect(Collectors.toList());
171175

172176
response.addAll(
173177
acquiredItems.stream()
174178
.map(item -> {
175-
// 3일 이내 획득한 Item
179+
// 1) 3일 이내 획득한 아이템은 newAcquiredFlag가 활성화
176180
boolean newAcquired = item.getAcquiredAt().isAfter(threeDaysAgo);
177-
// Hidden 아이템 처음 받았는지 여부
178-
if(item.getItem().isHidden() && !item.isOpened()) {
179-
newAcquired = true;
180-
}
181181

182-
return RewardItemResponseDTO.of(item.getItem(), newAcquired);
182+
// 2) Hidden 아이템을 받고 바텀시트가 출력되었는지 여부는 isOpened로 판별
183+
// 초기 상태는 false
184+
// 2-1) 히든 아이템의 isOpened가 true 라면 바텀시트가 1회 이상 출력된 것
185+
boolean isHiddenRead = item.isOpened();
186+
187+
return RewardItemResponseDTO.of(item.getItem(), newAcquired, isHiddenRead);
183188
}).collect(Collectors.toList())
184189
);
185190

@@ -191,8 +196,7 @@ public Map<RewardCategory, List<RewardItemResponseDTO>> getAcquiredItem(String u
191196
public void updateHiddenRead(HiddenUpdateRequestDTO request) {
192197
User user = userRepository.findByUserKey(request.getUserKey()).orElseThrow(() -> new RuntimeException("USER NOT FOUND"));
193198

194-
UserItem findItem = userItemRepository.findOneUnopenedHiddenItem(user, request.getYear(), request.getMonth())
195-
.orElseThrow(HiddenItemAlreadyOpenedException::new);
199+
UserItem findItem = userItemRepository.findOneUnopenedHiddenItem(user).orElseThrow(HiddenItemAlreadyOpenedException::new);
196200

197201
findItem.setOpened(true);
198202

0 commit comments

Comments
 (0)