Skip to content

Commit 96f967f

Browse files
authored
Merge pull request #225 from TeamLearningFlow/develop
Develop
2 parents 5189d5c + d9ae624 commit 96f967f

File tree

3 files changed

+63
-5
lines changed

3 files changed

+63
-5
lines changed

src/main/java/learningFlow/learningFlow_BE/converter/ResourceConverter.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,18 +122,27 @@ public static ResourceResponseDTO.RecentlyWatchedEpisodeDTO convertToRecentlyWat
122122
UserEpisodeProgress userEpisodeProgress
123123
) {
124124
return ResourceResponseDTO.RecentlyWatchedEpisodeDTO.builder()
125-
.resourceId(getResourceId(userCollection))
125+
.episodeId(getEpisodeId(userCollection))
126126
.collectionId(userCollection.getCollection().getId())
127127
.collectionTitle(userCollection.getCollection().getTitle())
128128
.resourceSource(extractResourceSource(getResourceUrl(userCollection)))
129129
.episodeNumber(userCollection.getUserCollectionStatus())
130130
.episodeName(getEpisodeName(userCollection))
131131
.progressRatio(calculateProgressRatio(userCollection))
132-
.currentProgress(userEpisodeProgress.getCurrentProgress())
133-
.totalProgress(userEpisodeProgress.getTotalProgress())
132+
.currentProgress(userEpisodeProgress != null ? userEpisodeProgress.getCurrentProgress() : 0)
133+
.totalProgress(userEpisodeProgress != null ? userEpisodeProgress.getTotalProgress() : 0)
134134
.build();
135135
}
136136

137+
private static Long getEpisodeId(UserCollection userCollection) {
138+
// added: episodeId를 찾는 메소드 추가
139+
return userCollection.getCollection().getEpisodes().stream()
140+
.filter(episode -> episode.getEpisodeNumber().equals(userCollection.getUserCollectionStatus()))
141+
.findFirst()
142+
.map(CollectionEpisode::getId)
143+
.orElse(null);
144+
}
145+
137146
public static List<ResourceResponseDTO.SearchResultResourceDTO> convertToResourceDTOWithToday(
138147
List<CollectionEpisode> episodes,
139148
int nextEpisodeNumber,
@@ -152,6 +161,29 @@ public static List<ResourceResponseDTO.SearchResultResourceDTO> convertToResourc
152161
.toList();
153162
}
154163

164+
public static ResourceResponseDTO.RecentlyWatchedEpisodeDTO convertToRecentlyWatchedEpisodeDTO(
165+
UserCollection userCollection,
166+
UserEpisodeProgress userEpisodeProgress,
167+
CollectionEpisode currentEpisode, // added: 파라미터 추가
168+
int totalEpisodes, // added: 파라미터 추가
169+
double progressPercentage // added: 파라미터 추가
170+
) {
171+
return ResourceResponseDTO.RecentlyWatchedEpisodeDTO.builder()
172+
.episodeId(currentEpisode.getId())
173+
.collectionId(userCollection.getCollection().getId())
174+
.collectionTitle(userCollection.getCollection().getTitle())
175+
.resourceSource(extractResourceSource(currentEpisode.getResource().getUrl()))
176+
.episodeNumber(userCollection.getUserCollectionStatus())
177+
.episodeName(currentEpisode.getEpisodeName())
178+
.progressRatio(String.format("%d / %d회차 (%.0f%%)",
179+
userCollection.getUserCollectionStatus(),
180+
totalEpisodes,
181+
progressPercentage))
182+
.currentProgress(userEpisodeProgress != null ? userEpisodeProgress.getCurrentProgress() : 0)
183+
.totalProgress(userEpisodeProgress != null ? userEpisodeProgress.getTotalProgress() : 0)
184+
.build();
185+
}
186+
155187
public static String extractResourceSource(String url) {
156188

157189
String lowerCaseUrl = url.toLowerCase();

src/main/java/learningFlow/learningFlow_BE/service/user/UserService.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,36 @@ public UserResponseDTO.UserMyPageResponseDTO getUserMyPageResponseDTO(String log
227227
return null;
228228
}
229229

230+
// added: 완료된 에피소드 수 계산
231+
long completedEpisodes = userCollection.getCollection().getEpisodes().stream()
232+
.map(episode -> userEpisodeProgressRepository.findById(
233+
new UserEpisodeProgressId(episode.getId(), loginId)
234+
))
235+
.filter(Optional::isPresent)
236+
.map(Optional::get)
237+
.filter(progress ->
238+
progress.getIsComplete() ||
239+
(progress.getCurrentProgress() != null && progress.getCurrentProgress() >= 100)
240+
)
241+
.count();
242+
243+
// added: 전체 에피소드 수
244+
int totalEpisodes = userCollection.getCollection().getEpisodes().size();
245+
246+
// added: 진행률 계산
247+
double progressPercentage = (double) completedEpisodes / totalEpisodes * 100;
248+
249+
230250
UserEpisodeProgressId progressId = new UserEpisodeProgressId(currentEpisode.getId(), loginId);
231251
UserEpisodeProgress userEpisodeProgress = userEpisodeProgressRepository.findById(progressId).orElse(null);
232252

233-
return ResourceConverter.convertToRecentlyWatchedEpisodeDTO(userCollection, userEpisodeProgress);
253+
return ResourceConverter.convertToRecentlyWatchedEpisodeDTO(
254+
userCollection,
255+
userEpisodeProgress,
256+
currentEpisode,
257+
totalEpisodes,
258+
progressPercentage
259+
);
234260
})
235261
.filter(Objects::nonNull)
236262
.toList();

src/main/java/learningFlow/learningFlow_BE/web/dto/resource/ResourceResponseDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static class ProgressResponseDTO {
8686
@NoArgsConstructor
8787
@AllArgsConstructor
8888
public static class RecentlyWatchedEpisodeDTO {
89-
Long resourceId;
89+
Long episodeId;
9090
Long collectionId;
9191
String collectionTitle;
9292
String resourceSource;

0 commit comments

Comments
 (0)