Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class RewardItemResponseDTO {
private RewardCategory category;
private boolean isHidden;
private boolean newAcquiredFlag;
private boolean isHiddenRead;

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

public static RewardItemResponseDTO of(RewardItem rewardItem, boolean newAcquiredFlag) {
public static RewardItemResponseDTO of(RewardItem rewardItem, boolean newAcquiredFlag, boolean isHiddenRead) {
RewardItemResponseDTO response = new RewardItemResponseDTO();

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

return response;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,7 @@ List<UserItem> findAllByUser(
@Query("SELECT ui FROM UserItem ui " +
"JOIN ui.item i " +
"WHERE ui.user = :user " +
"AND FUNCTION('YEAR', ui.acquiredAt) = :year " +
"AND FUNCTION('MONTH', ui.acquiredAt) = :month " +
"AND ui.isOpened = false " +
"AND i.isHidden = true")
Optional<UserItem> findOneUnopenedHiddenItem(@Param("user") User user,
@Param("year") int year,
@Param("month") int month);
Optional<UserItem> findOneUnopenedHiddenItem(@Param("user") User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public List<RewardItemResponseDTO> openItems(String userKey) {
userItemRepository.saveAll(notOpenedItems);

// 히든 아이템 획득
acquireHiddenItems(user);;
acquireHiddenItems(user);

List<RewardItemResponseDTO> response = new ArrayList<>();
for (UserItem item : notOpenedItems) {
Expand All @@ -123,11 +123,15 @@ private void acquireHiddenItems(User user) {
List<UserItem> acquiredItems = userItemRepository.findAllByUser(user);
if(acquiredItems.size() == MAX_REWARD) {
RewardItem hiddenItem = rewardItemRepository.findFirstByHiddenTrue().orElseThrow();

// 히든 아이템 획득 시 isOpened 값을 활용하여 isHiddenRead 값을 판별
boolean isHiddenRead = false;

UserItem newUserItem = UserItem.builder()
.user(user)
.item(hiddenItem)
.acquiredAt(LocalDateTime.now(ZoneId.of("Asia/Seoul")))
.isOpened(true)
.isOpened(isHiddenRead)
.build();
userItemRepository.save(newUserItem);
}
Expand Down Expand Up @@ -156,21 +160,22 @@ public Map<RewardCategory, List<RewardItemResponseDTO>> getAcquiredItem(String u
// 기본 아이템들을 DTO로 변환
List<RewardItemResponseDTO> response = defaultItemIds.stream()
.map(id -> rewardItemRepository.findById(id)
.map(item -> RewardItemResponseDTO.of(item, false))
.map(item -> RewardItemResponseDTO.of(item, false, false))
.orElseThrow(() -> new RuntimeException("Default item ID " + id + " not found")))
.collect(Collectors.toList());

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

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

return RewardItemResponseDTO.of(item.getItem(), newAcquired, isHiddenRead);
}).collect(Collectors.toList())
);

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

UserItem findItem = userItemRepository.findOneUnopenedHiddenItem(user, request.getYear(), request.getMonth())
.orElseThrow(HiddenItemAlreadyOpenedException::new);
UserItem findItem = userItemRepository.findOneUnopenedHiddenItem(user).orElseThrow(HiddenItemAlreadyOpenedException::new);

findItem.setOpened(true);

Expand Down
Loading