diff --git a/src/main/java/com/jisungin/api/talkroom/TalkRoomController.java b/src/main/java/com/jisungin/api/talkroom/TalkRoomController.java index 00ee608..6c73199 100644 --- a/src/main/java/com/jisungin/api/talkroom/TalkRoomController.java +++ b/src/main/java/com/jisungin/api/talkroom/TalkRoomController.java @@ -6,6 +6,7 @@ import com.jisungin.api.talkroom.request.TalkRoomEditRequest; import com.jisungin.application.OffsetLimit; import com.jisungin.application.PageResponse; +import com.jisungin.application.SliceResponse; import com.jisungin.application.talkroom.TalkRoomService; import com.jisungin.application.talkroom.response.TalkRoomFindAllResponse; import com.jisungin.application.talkroom.response.TalkRoomFindOneResponse; @@ -49,7 +50,7 @@ public ApiResponse createTalkRoom(@Valid @RequestBody T } @GetMapping("/talk-rooms") - public ApiResponse> findAllTalkRoom( + public ApiResponse> findAllTalkRoom( @RequestParam(value = "page", required = false, defaultValue = "1") Integer page, @RequestParam(value = "size", required = false, defaultValue = "10") Integer size, @RequestParam(value = "order", required = false, defaultValue = "recent") String order, @@ -58,9 +59,7 @@ public ApiResponse> findAllTalkRoom( ) { LocalDateTime now = LocalDateTime.now(); - return ApiResponse.ok( - talkRoomService.findAllTalkRoom(OffsetLimit.of(page, size, order), search, day, - now)); + return ApiResponse.ok(talkRoomService.findAllTalkRoom(OffsetLimit.of(page, size, order), search, day, now)); } @GetMapping("/talk-rooms/{talkRoomId}") diff --git a/src/main/java/com/jisungin/application/SliceResponse.java b/src/main/java/com/jisungin/application/SliceResponse.java index 6b60ea4..22be15d 100644 --- a/src/main/java/com/jisungin/application/SliceResponse.java +++ b/src/main/java/com/jisungin/application/SliceResponse.java @@ -1,6 +1,7 @@ package com.jisungin.application; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; import java.util.List; import lombok.Builder; import lombok.Getter; @@ -33,6 +34,27 @@ private SliceResponse(List content, boolean hasContent, boolean first, boolea this.size = size; } + public static SliceResponse of(List content, Integer offset, Integer limit) { + List response = validateContent(content, limit); + + boolean hasContent = !response.isEmpty(); + boolean first = (offset == 0); + boolean last = isLast(content, limit); + + Integer number = (offset / limit) + 1; + Integer size = response.size(); + + return SliceResponse.builder() + .content(response) + .hasContent(hasContent) + .first(first) + .last(last) + .number(number) + .size(size) + .build(); + } + + public static SliceResponse of(List content, Integer offset, Integer limit, boolean hasNext) { boolean hasContent = !content.isEmpty(); boolean first = (offset == 0); @@ -51,4 +73,12 @@ public static SliceResponse of(List content, Integer offset, Integer l .build(); } + private static List validateContent(List content, Integer limit) { + return content.size() > limit ? content.subList(0, limit) : content; + } + + private static boolean isLast(List content, Integer limit) { + return content.size() <= limit; + } + } diff --git a/src/main/java/com/jisungin/application/talkroom/TalkRoomService.java b/src/main/java/com/jisungin/application/talkroom/TalkRoomService.java index f5b9281..0e369f4 100644 --- a/src/main/java/com/jisungin/application/talkroom/TalkRoomService.java +++ b/src/main/java/com/jisungin/application/talkroom/TalkRoomService.java @@ -2,6 +2,7 @@ import com.jisungin.application.OffsetLimit; import com.jisungin.application.PageResponse; +import com.jisungin.application.SliceResponse; import com.jisungin.application.talkroom.request.TalkRoomCreateServiceRequest; import com.jisungin.application.talkroom.request.TalkRoomEditServiceRequest; import com.jisungin.application.talkroom.response.TalkRoomFindAllResponse; @@ -86,20 +87,17 @@ public TalkRoomFindOneResponse createTalkRoom(TalkRoomCreateServiceRequest reque return TalkRoomFindOneResponse.of(talkRoom, book, user, imageUrls, readingStatus); } - public PageResponse findAllTalkRoom(OffsetLimit offsetLimit, String search, String day, - LocalDateTime now + public SliceResponse findAllTalkRoom(OffsetLimit offsetLimit, String search, String day, + LocalDateTime now ) { List talkRooms = talkRoomRepository.findAllTalkRoom(offsetLimit.getOffset(), offsetLimit.getLimit(), offsetLimit.getOrder(), search, day, now); List talkRoomIds = talkRooms.stream().map(TalkRoomQueryEntity::getId).toList(); - Map> talkRoomRoleMap = talkRoomRoleRepository.findTalkRoomRoleByIds(talkRoomIds); - Long totalCount = talkRoomRepository.countTalkRooms(search, day, now); - - return PageResponse.of(talkRooms.size(), totalCount, - TalkRoomFindAllResponse.toList(talkRooms, talkRoomRoleMap)); + return SliceResponse.of(TalkRoomFindAllResponse.toList(talkRooms, talkRoomRoleMap), offsetLimit.getOffset(), + offsetLimit.getLimit()); } public TalkRoomFindOneResponse findOneTalkRoom(Long talkRoomId) {