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 @@ -3,18 +3,20 @@
import cc.backend.amateurShow.dto.AmateurEnrollRequestDTO;
import cc.backend.amateurShow.dto.AmateurEnrollResponseDTO;
import cc.backend.amateurShow.dto.AmateurShowResponseDTO;
import cc.backend.amateurShow.dto.AmateurShowResponseDTO.AmateurShowList;
import cc.backend.amateurShow.dto.AmateurUpdateRequestDTO;
import cc.backend.amateurShow.service.amateurShowService.AmateurService;
import cc.backend.apiPayLoad.ApiResponse;
import cc.backend.apiPayLoad.SliceResponse;
import cc.backend.member.MemberService;
import cc.backend.member.entity.Member;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -74,9 +76,11 @@ public ApiResponse<List<AmateurShowResponseDTO.AmateurShowList>> getShowToday(@A

@GetMapping("/ongoing")
@Operation(summary = "현재 진행중인 소극장 공연 조회 API")
public ApiResponse<Page<AmateurShowResponseDTO.AmateurShowList>> getShowOngoing(@AuthenticationPrincipal(expression = "member") Member member,
@ParameterObject Pageable pageable) {
return ApiResponse.onSuccess(amateurService.getShowOngoing(member.getId(), pageable));
public ApiResponse<SliceResponse<AmateurShowList>> getShowOngoing(
@AuthenticationPrincipal(expression = "member") Member member, @ParameterObject Pageable pageable
) {
Slice<AmateurShowList> sliceResult = amateurService.getShowOngoing(member.getId(), pageable);
return ApiResponse.onSuccess(SliceResponse.of(sliceResult));
}

@GetMapping("/closing")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import cc.backend.amateurShow.dto.AmateurUpdateRequestDTO;
import cc.backend.amateurShow.entity.AmateurShowStatus;
import cc.backend.ticket.dto.response.ReserveListResponseDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
Expand All @@ -21,7 +20,7 @@ AmateurEnrollResponseDTO.AmateurEnrollResult enrollShow(Long memberId,
AmateurEnrollResponseDTO.AmateurEnrollResult updateShow(Long memberId, Long showId, AmateurUpdateRequestDTO requestDTO);
void deleteShow(Long memberId, Long amateurShowId);
List<AmateurShowResponseDTO.AmateurShowList> getShowToday(Long memberId);
Page<AmateurShowResponseDTO.AmateurShowList> getShowOngoing(Long memberId, Pageable pageable);
Slice<AmateurShowResponseDTO.AmateurShowList> getShowOngoing(Long memberId, Pageable pageable);
List<AmateurShowResponseDTO.AmateurShowList> getShowRanking(Long memberId);
List<AmateurShowResponseDTO.AmateurShowList> getIncomingShow(Long memberId);
List<AmateurShowResponseDTO.AmateurShowList> getShowClosing(Long memberId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@
import cc.backend.memberLike.repository.MemberLikeRepository;
import cc.backend.ticket.dto.response.ReserveListResponseDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -411,7 +410,7 @@ public List<AmateurShowResponseDTO.AmateurShowList> getShowToday(Long memberId)

// 현재 진행중인 소극장 공연 리스트 조회
@Override
public Page<AmateurShowResponseDTO.AmateurShowList> getShowOngoing(Long memberId, Pageable pageable) {
public Slice<AmateurShowResponseDTO.AmateurShowList> getShowOngoing(Long memberId, Pageable pageable) {
Member member = memberRepository.findById(memberId)
.orElseThrow(()-> new GeneralException(ErrorStatus.MEMBER_NOT_AUTHORIZED));

Expand Down Expand Up @@ -444,7 +443,15 @@ public Page<AmateurShowResponseDTO.AmateurShowList> getShowOngoing(Long memberId

int start = (int) pageable.getOffset();
int end = Math.min(start + pageable.getPageSize(), result.size());
return new PageImpl<>(result.subList(start, end), pageable, result.size());

List<AmateurShowResponseDTO.AmateurShowList> content = new ArrayList<>();
if (start < result.size()) {
content = result.subList(start, end);
}

boolean hasNext = end < result.size();

return new SliceImpl<>(content, pageable, hasNext);
}

// 소극장 공연 랭킹 리스트 조회
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/cc/backend/apiPayLoad/SliceResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package cc.backend.apiPayLoad;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Slice;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SliceResponse<T> {

@Schema(description = "데이터 리스트")
private List<T> content;

@Schema(description = "현재 페이지 번호 (0부터 시작)")
private int page;

@Schema(description = "페이지 크기")
private int size;

@Schema(description = "첫 번째 페이지 여부")
private boolean first;

@Schema(description = "마지막 페이지 여부")
private boolean last;

@Schema(description = "다음 페이지 존재 여부")
private boolean hasNext;

public static <T> SliceResponse<T> of(Slice<T> slice) {
return SliceResponse.<T>builder()
.content(slice.getContent())
.page(slice.getNumber())
.size(slice.getSize())
.first(slice.isFirst())
.last(slice.isLast())
.hasNext(slice.hasNext())
.build();
}
}