@@ -109,7 +109,7 @@ public List<RewardItemResponseDTO> openItems(String userKey) {
109109 userItemRepository .saveAll (notOpenedItems );
110110
111111 // 히든 아이템 획득
112- acquireHiddenItems (user );;
112+ acquireHiddenItems (user );
113113
114114 List <RewardItemResponseDTO > response = new ArrayList <>();
115115 for (UserItem item : notOpenedItems ) {
@@ -123,11 +123,15 @@ private void acquireHiddenItems(User user) {
123123 List <UserItem > acquiredItems = userItemRepository .findAllByUser (user );
124124 if (acquiredItems .size () == MAX_REWARD ) {
125125 RewardItem hiddenItem = rewardItemRepository .findFirstByHiddenTrue ().orElseThrow ();
126+
127+ // 히든 아이템 획득 시 isOpened 값을 활용하여 isHiddenRead 값을 판별
128+ boolean isHiddenRead = false ;
129+
126130 UserItem newUserItem = UserItem .builder ()
127131 .user (user )
128132 .item (hiddenItem )
129133 .acquiredAt (LocalDateTime .now (ZoneId .of ("Asia/Seoul" )))
130- .isOpened (false )
134+ .isOpened (isHiddenRead )
131135 .build ();
132136 userItemRepository .save (newUserItem );
133137 }
@@ -156,21 +160,22 @@ public Map<RewardCategory, List<RewardItemResponseDTO>> getAcquiredItem(String u
156160 // 기본 아이템들을 DTO로 변환
157161 List <RewardItemResponseDTO > response = defaultItemIds .stream ()
158162 .map (id -> rewardItemRepository .findById (id )
159- .map (item -> RewardItemResponseDTO .of (item , false ))
163+ .map (item -> RewardItemResponseDTO .of (item , false , false ))
160164 .orElseThrow (() -> new RuntimeException ("Default item ID " + id + " not found" )))
161165 .collect (Collectors .toList ());
162166
163167 response .addAll (
164168 acquiredItems .stream ()
165169 .map (item -> {
166- // 3일 이내 획득한 Item
170+ // 1) 3일 이내 획득한 아이템은 newAcquiredFlag가 활성화
167171 boolean newAcquired = item .getAcquiredAt ().isAfter (threeDaysAgo );
168- // Hidden 아이템 처음 받았는지 여부
169- if (item .getItem ().isHidden () && !item .isOpened ()) {
170- newAcquired = true ;
171- }
172172
173- return RewardItemResponseDTO .of (item .getItem (), newAcquired );
173+ // 2) Hidden 아이템을 받고 바텀시트가 출력되었는지 여부는 isOpened로 판별
174+ // 초기 상태는 false
175+ // 2-1) 히든 아이템의 isOpened가 true 라면 바텀시트가 1회 이상 출력된 것
176+ boolean isHiddenRead = item .isOpened ();
177+
178+ return RewardItemResponseDTO .of (item .getItem (), newAcquired , isHiddenRead );
174179 }).collect (Collectors .toList ())
175180 );
176181
0 commit comments