Skip to content

Commit dc2e779

Browse files
authored
Merge pull request #200 from TeamLearningFlow/develop
Develop
2 parents 074bb57 + db61dbd commit dc2e779

File tree

3 files changed

+69
-9
lines changed

3 files changed

+69
-9
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,26 @@ public static ResourceResponseDTO.changeEpisodeIsCompleteDTO toChangeEpisodeIsCo
7676
.build();
7777
}
7878

79+
public static ResourceResponseDTO.SearchResultResourceDTO convertToResourceDTO(
80+
CollectionEpisode episode,
81+
UserEpisodeProgress userProgress, // added: 사용자 진도 정보 추가
82+
Integer currentEpisodeNumber // added: 현재 학습 중인 에피소드 번호 추가
83+
) {
84+
return ResourceResponseDTO.SearchResultResourceDTO.builder()
85+
.episodeId(episode.getId())
86+
.episodeName(episode.getEpisodeName())
87+
.url(episode.getResource().getUrl())
88+
.resourceSource(extractResourceSource(episode.getResource().getUrl()))
89+
.episodeNumber(episode.getEpisodeNumber())
90+
// added: today 값 설정 - 다음 학습할 에피소드인지 확인
91+
.today(episode.getEpisodeNumber().equals(currentEpisodeNumber + 1))
92+
// added: completed 값 설정 - 현재 에피소드보다 번호가 작으면 완료된 것
93+
.completed(episode.getEpisodeNumber() <= currentEpisodeNumber)
94+
// added: progress 값 설정 - 해당 에피소드의 진도율
95+
.progress(userProgress != null ? userProgress.getCurrentProgress() : null)
96+
.build();
97+
}
98+
7999
public static ResourceResponseDTO.SearchResultResourceDTO convertToResourceDTO(
80100
CollectionEpisode episode,
81101
UserEpisodeProgress progress

src/main/java/learningFlow/learningFlow_BE/service/auth/common/AuthTokenCleanupScheduler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.RequiredArgsConstructor;
66
import org.springframework.scheduling.annotation.Scheduled;
77
import org.springframework.stereotype.Component;
8+
import org.springframework.transaction.annotation.Transactional;
89

910
import java.time.LocalDateTime;
1011

@@ -16,11 +17,13 @@ public class AuthTokenCleanupScheduler {
1617
private final PasswordResetTokenRepository tokenRepository;
1718

1819
@Scheduled(cron = "0 0 0 * * *") // 매일 자정에 실행
20+
@Transactional
1921
public void cleanupExpiredTokens() {
2022
tokenRepository.deleteByExpiryDateBefore(LocalDateTime.now());
2123
}
2224

2325
@Scheduled(cron = "0 0 0 * * *") // 매일 자정에 실행
26+
@Transactional
2427
public void cleanupExpiredEmailVerificationTokens() {
2528
emailVerificationTokenRepository.deleteByExpiryDateBefore(LocalDateTime.now());
2629
}

src/main/java/learningFlow/learningFlow_BE/service/collection/CollectionService.java

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ public CollectionResponseDTO.CollectionLearningInfo getLearningInfo(
141141
.learningStatus("BEFORE")
142142
.progressRate(null)
143143
.resourceDTOList(isDetailView ?
144-
getAllResources(collection, null) : // 상세 조회면 전체 리소스
145-
getFilteredResources(collection, null, 0)) // 아니면 필터링된 리소스
144+
getAllResourcesWithProgress(collection, null, 0) :
145+
getFilteredResources(collection, null, 0))
146146
.build();
147147
}
148148

@@ -153,8 +153,8 @@ public CollectionResponseDTO.CollectionLearningInfo getLearningInfo(
153153
.learningStatus("BEFORE")
154154
.progressRate(null)
155155
.resourceDTOList(isDetailView ?
156-
getAllResources(collection, user) : // 상세 조회면 전체 리소스
157-
getFilteredResources(collection, null, 0)) // 아니면 필터링된 리소스
156+
getAllResourcesWithProgress(collection, null, 0) :
157+
getFilteredResources(collection, null, 0))
158158
.build();
159159
}
160160

@@ -166,8 +166,8 @@ public CollectionResponseDTO.CollectionLearningInfo getLearningInfo(
166166
.startDate(realUserCollection.getCreatedAt().toLocalDate())
167167
.completedDate(realUserCollection.getCompletedTime())
168168
.resourceDTOList(isDetailView ?
169-
getAllResources(collection) : // 상세 조회면 전체 리소스
170-
new ArrayList<>()) // 아니면 빈 리스트
169+
getAllResourcesWithProgress(collection, user, realUserCollection.getUserCollectionStatus()) :
170+
new ArrayList<>())
171171
.build();
172172
}
173173

@@ -178,11 +178,34 @@ public CollectionResponseDTO.CollectionLearningInfo getLearningInfo(
178178
.startDate(realUserCollection.getCreatedAt().toLocalDate())
179179
.currentEpisode(realUserCollection.getUserCollectionStatus())
180180
.resourceDTOList(isDetailView ?
181-
getAllResources(collection, user) :
181+
getAllResourcesWithProgress(collection, user, realUserCollection.getUserCollectionStatus()) :
182182
getFilteredResources(collection, user, realUserCollection.getUserCollectionStatus()))
183183
.build();
184184
}
185185

186+
private List<ResourceResponseDTO.SearchResultResourceDTO> getAllResourcesWithProgress(
187+
Collection collection,
188+
User user,
189+
int currentEpisodeNumber
190+
) {
191+
return collection.getEpisodes().stream()
192+
.sorted(Comparator.comparing(CollectionEpisode::getEpisodeNumber))
193+
.map(episode -> {
194+
UserEpisodeProgress progress = null;
195+
if (user != null) {
196+
progress = userEpisodeProgressRepository.findById(
197+
new UserEpisodeProgressId(episode.getId(), user.getLoginId())
198+
).orElse(null);
199+
}
200+
return ResourceConverter.convertToResourceDTO(
201+
episode,
202+
progress,
203+
currentEpisodeNumber
204+
);
205+
})
206+
.toList();
207+
}
208+
186209
private int calculateProgressRate(UserCollection userCollection) {
187210
return (int) Math.round((double) userCollection.getUserCollectionStatus() /
188211
userCollection.getCollection().getEpisodes().size() * 100);
@@ -216,9 +239,23 @@ private List<ResourceResponseDTO.SearchResultResourceDTO> getFilteredResources(
216239
.limit(4)
217240
.toList();
218241
}
219-
220-
return filteredEpisodes.stream()
242+
/* return filteredEpisodes.stream()
221243
.map(ResourceConverter::convertToResourceDTO)
244+
.toList();*/
245+
return filteredEpisodes.stream()
246+
.map(episode -> {
247+
UserEpisodeProgress progress = null;
248+
if (user != null) {
249+
progress = userEpisodeProgressRepository.findById(
250+
new UserEpisodeProgressId(episode.getId(), user.getLoginId())
251+
).orElse(null);
252+
}
253+
return ResourceConverter.convertToResourceDTO(
254+
episode,
255+
progress,
256+
currentEpisode
257+
);
258+
})
222259
.toList();
223260
}
224261

0 commit comments

Comments
 (0)