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 @@ -27,6 +27,7 @@
import org.runnect.server.user.exception.userException.NotFoundUserException;
import org.runnect.server.user.repository.UserRepository;
import org.runnect.server.user.service.UserStampService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -136,6 +137,9 @@ public UpdateCourseResponseDto updateCourse(Long userId, Long courseId, String t
return UpdateCourseResponseDto.of(course);
}

// 조건부로 공개 코스가 같이 삭제될 수 있어(비공개 코스면 스킵), 매번 무효화해도
// 안전한 쪽(과다 무효화)을 택함 — 공개 코스 목록 캐시(전체페이지수/마라톤/추천) 대상
@CacheEvict(value = {"publicCourseTotalPageCount", "marathonPublicCourse", "recommendPublicCourse"}, allEntries = true)
@Transactional
public DeleteCoursesResponseDto deleteCourses(List<Long> courseIdList, Long userId) {
courseIdList.forEach(courseId -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.runnect.server.user.exception.userException.NotFoundUserException;
import org.runnect.server.user.repository.UserRepository;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand Down Expand Up @@ -300,6 +301,9 @@ public GetPublicCourseDetailResponseDto getPublicCourseDetail(final Long userId,

}

// 코스 목록에 영향을 주는 쓰기 작업이라, 작성자 본인 캐시만이 아니라
// 전체 유저가 보는 목록 캐시(전체페이지수/마라톤/추천)를 다 지워야 함
@CacheEvict(value = {"publicCourseTotalPageCount", "marathonPublicCourse", "recommendPublicCourse"}, allEntries = true)
@Transactional
public CreatePublicCourseResponseDto createPublicCourse(
final Long userId,
Expand Down Expand Up @@ -344,6 +348,7 @@ public CreatePublicCourseResponseDto createPublicCourse(

}

@CacheEvict(value = {"publicCourseTotalPageCount", "marathonPublicCourse", "recommendPublicCourse"}, allEntries = true)
@Transactional
public DeletePublicCoursesResponseDto deletePublicCourses(
Long userId,
Expand Down Expand Up @@ -389,6 +394,8 @@ public DeletePublicCoursesResponseDto deletePublicCourses(
return DeletePublicCoursesResponseDto.from(publicCourses.size());
}

// 제목/설명만 바뀌고 코스 개수는 그대로라 전체페이지수 캐시는 지울 필요 없음
@CacheEvict(value = {"marathonPublicCourse", "recommendPublicCourse"}, allEntries = true)
@Transactional
public UpdatePublicCourseResponseDto updatePublicCourse(Long userId, Long publicCourseId, String title, String description) {
PublicCourse publicCourse = publicCourseRepository.findById(publicCourseId)
Expand Down
Loading