diff --git a/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryCustom.java b/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryCustom.java index c6eefcd..21d0629 100644 --- a/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryCustom.java +++ b/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryCustom.java @@ -16,4 +16,6 @@ public interface InternshipRepositoryCustom { Page searchInternshipAnnouncement(String keyword, String sortBy, Pageable pageable); Page findFilteredInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable); + + Page findAllInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable); } diff --git a/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryImpl.java b/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryImpl.java index 0b108de..cd176ca 100644 --- a/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryImpl.java +++ b/src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryImpl.java @@ -109,6 +109,27 @@ private OrderSpecifier createOrderSpecifier(String sortBy) { }; } + @Override + public Page findAllInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable) { + List content = jpaQueryFactory + .select(internshipAnnouncement, scrap.id, scrap.color) + .from(internshipAnnouncement) + .leftJoin(internshipAnnouncement.scraps, scrap).on(scrap.user.eq(user)) + .orderBy( + sortAnnouncementsByDeadline().asc(), + getSortOrder(sortBy) + ) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + JPAQuery countQuery = jpaQueryFactory + .select(internshipAnnouncement.count()) + .from(internshipAnnouncement); + + return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne); + } + @Override public Page findFilteredInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable) { List content = jpaQueryFactory diff --git a/src/main/java/org/terning/terningserver/service/HomeServiceImpl.java b/src/main/java/org/terning/terningserver/service/HomeServiceImpl.java index 653de0d..7c3ea3d 100644 --- a/src/main/java/org/terning/terningserver/service/HomeServiceImpl.java +++ b/src/main/java/org/terning/terningserver/service/HomeServiceImpl.java @@ -6,9 +6,11 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.terning.terningserver.domain.Filter; import org.terning.terningserver.domain.InternshipAnnouncement; import org.terning.terningserver.domain.User; import org.terning.terningserver.domain.enums.Color; +import org.terning.terningserver.domain.enums.JobType; import org.terning.terningserver.dto.user.response.HomeAnnouncementsResponseDto; import org.terning.terningserver.dto.user.response.HomeResponseDto; import org.terning.terningserver.exception.CustomException; @@ -32,19 +34,19 @@ public class HomeServiceImpl implements HomeService { @Override public HomeAnnouncementsResponseDto getAnnouncements(Long userId, String sortBy, Pageable pageable) { User user = getUserById(userId); - - if (user.getFilter() == null) { - return createEmptyResponse(); + Filter filter = user.getFilter(); + Page pagedAnnouncements; + if (filter == null || isDefaultFilter(filter)) { + pagedAnnouncements = internshipRepository.findAllInternshipsWithScrapInfo(user, sortBy, pageable); + } else { + pagedAnnouncements = internshipRepository.findFilteredInternshipsWithScrapInfo(user, sortBy, pageable); } - Page pagedAnnouncements = internshipRepository.findFilteredInternshipsWithScrapInfo(user, sortBy, pageable); - if (pagedAnnouncements.isEmpty()) { return createEmptyResponse(); } List responseDtos = mapToHomeResponseDtos(pagedAnnouncements); - return createResponse(pagedAnnouncements, responseDtos); } @@ -53,6 +55,14 @@ private User getUserById(Long userId) { .orElseThrow(() -> new CustomException(ErrorMessage.NOT_FOUND_USER_EXCEPTION)); } + private boolean isDefaultFilter(Filter filter) { + return filter.getJobType() == JobType.TOTAL + && filter.getGrade() == null + && filter.getWorkingPeriod() == null + && filter.getStartYear() == 0 + && filter.getStartMonth() == 0; + } + private HomeAnnouncementsResponseDto createEmptyResponse() { return HomeAnnouncementsResponseDto.of(0, 0, false, List.of()); }