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
@@ -1,7 +1,5 @@
package com.likelion.danchu.domain.store.controller;

import java.util.List;

import jakarta.validation.Valid;

import org.springframework.http.HttpStatus;
Expand All @@ -10,11 +8,13 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.likelion.danchu.domain.store.dto.request.StoreRequest;
import com.likelion.danchu.domain.store.dto.response.PageableResponse;
import com.likelion.danchu.domain.store.dto.response.StoreResponse;
import com.likelion.danchu.domain.store.exception.StoreErrorCode;
import com.likelion.danchu.domain.store.service.StoreService;
Expand Down Expand Up @@ -73,10 +73,24 @@ public ResponseEntity<BaseResponse<StoreResponse>> createStore(
.body(BaseResponse.success("가게 생성에 성공했습니다.", storeResponse));
}

@Operation(summary = "전체 가게 조회", description = "등록된 모든 가게 정보를 조회합니다.")
@Operation(
summary = "가게 목록 페이징 조회",
description =
"""
페이지 번호(page)와 사이즈(size)를 기반으로 전체 가게를 페이징 조회합니다.

✅ 기본 설정:
- **한 페이지당 3개의 가게**가 표시됩니다.

✅ 파라미터 설명:
- page : 0부터 시작하는 페이지 번호입니다. (예: 첫 번째 페이지 → page=0)
- size : 페이지 당 보여줄 가게 수입니다. (기본값: 3)
""")
@GetMapping
public ResponseEntity<BaseResponse<List<StoreResponse>>> getAllStores() {
List<StoreResponse> storeResponses = storeService.getAllStores();
return ResponseEntity.ok(BaseResponse.success("전체 가게 조회에 성공했습니다.", storeResponses));
public ResponseEntity<BaseResponse<PageableResponse<StoreResponse>>> getPaginatedStores(
@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "3") int size) {

PageableResponse<StoreResponse> storeResponses = storeService.getPaginatedStores(page, size);
return ResponseEntity.ok(BaseResponse.success("가게 페이징 조회에 성공했습니다.", storeResponses));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.likelion.danchu.domain.store.dto.response;

import java.util.List;

import org.springframework.data.domain.Page;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(title = "Pageable 응답 DTO", description = "페이징이 적용된 응답 형식")
public class PageableResponse<T> {

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

@Schema(description = "현재 페이지 번호", example = "0")
private int currentPage;

@Schema(description = "전체 페이지 수", example = "5")
private int totalPages;

@Schema(description = "전체 요소 수", example = "15")
private long totalElements;

@Schema(description = "첫 페이지 여부", example = "true")
private boolean isFirst;

@Schema(description = "마지막 페이지 여부", example = "false")
private boolean isLast;

@Schema(description = "페이지 당 데이터 수", example = "3")
private int pageSize;

@Schema(description = "현재 페이지의 요소 수", example = "3")
private int numberOfElements;

public static <T> PageableResponse<T> from(Page<T> page) {
return PageableResponse.<T>builder()
.content(page.getContent())
.currentPage(page.getNumber())
.totalPages(page.getTotalPages())
.totalElements(page.getTotalElements())
.isFirst(page.isFirst())
.isLast(page.isLast())
.pageSize(page.getSize())
.numberOfElements(page.getNumberOfElements())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.likelion.danchu.domain.store.service;

import java.util.List;

import jakarta.transaction.Transactional;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.likelion.danchu.domain.store.dto.request.StoreRequest;
import com.likelion.danchu.domain.store.dto.response.PageableResponse;
import com.likelion.danchu.domain.store.dto.response.StoreResponse;
import com.likelion.danchu.domain.store.entity.Store;
import com.likelion.danchu.domain.store.exception.StoreErrorCode;
Expand Down Expand Up @@ -61,9 +62,12 @@ public StoreResponse createStore(StoreRequest storeRequest, MultipartFile imageF
return storeMapper.toResponse(saved);
}

// 전체 가게 조회
public List<StoreResponse> getAllStores() {
List<Store> storeList = storeRepository.findAll();
return storeMapper.toResponseList(storeList);
// 전체 가게 페이징 조회
public PageableResponse<StoreResponse> getPaginatedStores(int page, int size) {
PageRequest pageRequest = PageRequest.of(page, size); // 페이지당 3개
Page<Store> storePage = storeRepository.findAll(pageRequest);
Page<StoreResponse> storeResponsePage = storePage.map(storeMapper::toResponse);

return PageableResponse.from(storeResponsePage);
}
}