diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/api/ChatRoomApi.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/api/ChatRoomApi.java index 7fc81593..70c06203 100644 --- a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/api/ChatRoomApi.java +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/api/ChatRoomApi.java @@ -1,6 +1,8 @@ package kr.co.pennyway.api.apis.chat.api; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -26,7 +28,13 @@ public interface ChatRoomApi { @ApiResponse(responseCode = "200", description = "가입한 채팅방 목록 조회 성공", content = @Content(schemaProperties = @SchemaProperty(name = "chatRooms", array = @ArraySchema(schema = @Schema(implementation = ChatRoomRes.Detail.class))))) ResponseEntity getMyChatRooms(@AuthenticationPrincipal SecurityUserDetails user); - @Operation(summary = "채팅방 검색", method = "GET", description = "사용자가 가입한 채팅방 중 검색어에 일치하는 채팅방 목록을 조회한다. 검색 결과는 무한 스크롤 응답으로 반환되며, 정렬 순서는 정확도가 높은 순으로 반환된다. content 필드는 List 타입으로, '가입한 채팅방 목록 조회' API 응답과 동일하다.") + @Operation(summary = "채팅방 검색", method = "GET", description = "사용자가 가입한 채팅방 중 검색어에 일치하는 채팅방 목록을 조회한다. 검색 결과는 무한 스크롤 응답으로 반환되며, 정렬 순서는 정확도가 높은 순으로 반환된다. contents 필드는 List 타입으로, '가입한 채팅방 목록 조회' API 응답과 동일하다.") + @Parameters({ + @Parameter(name = "target", description = "검색 대상. 채팅방 제목 혹은 설명을 검색한다. 최소한 2자 이상의 문자열이어야 한다.", example = "페니웨이", required = true), + @Parameter(name = "page", description = "페이지 번호. 0부터 시작한다.", example = "0", required = true), + @Parameter(name = "size", description = "페이지 크기. 한 페이지 당 반환되는 채팅방 개수이다. 기본값으로 10개씩 반환한다."), + @Parameter(name = "query", hidden = true) + }) @ApiResponse(responseCode = "200", description = "채팅방 검색 성공", content = @Content(schemaProperties = @SchemaProperty(name = "chatRooms", schema = @Schema(implementation = SliceResponseTemplate.class)))) ResponseEntity searchChatRooms(@Validated ChatRoomReq.SearchQuery query, @AuthenticationPrincipal SecurityUserDetails user); } diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/controller/ChatRoomController.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/controller/ChatRoomController.java index b81dd274..767922fd 100644 --- a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/controller/ChatRoomController.java +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/controller/ChatRoomController.java @@ -43,6 +43,6 @@ public ResponseEntity getMyChatRooms(@AuthenticationPrincipal SecurityUserDet public ResponseEntity searchChatRooms(@Validated ChatRoomReq.SearchQuery query, @AuthenticationPrincipal SecurityUserDetails user) { Pageable pageable = Pageable.ofSize(query.size()).withPage(query.page()); - return ResponseEntity.ok(SuccessResponse.from(CHAT_ROOMS, chatRoomUseCase.searchChatRooms(user.getUserId(), query.target(), pageable))); + return ResponseEntity.ok(SuccessResponse.from(CHAT_ROOM, chatRoomUseCase.searchChatRooms(user.getUserId(), query.target(), pageable))); } } diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/dto/ChatRoomReq.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/dto/ChatRoomReq.java index 4253ab0d..db2df9ee 100644 --- a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/dto/ChatRoomReq.java +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/chat/dto/ChatRoomReq.java @@ -36,14 +36,16 @@ public ChatRoom toEntity(long chatRoomId, String originImageUrl) { } public record SearchQuery( - @Schema(description = "검색 대상. 채팅방 제목 혹은 설명을 검색한다. 최소한 2자 이상의 문자열이어야 한다.", example = "페니웨이") @NotNull(message = "검색 대상은 NULL이 될 수 없습니다.") @Size(min = 2) String target, - @Schema(description = "페이지 번호. 0부터 시작한다.", example = "0") int page, - @Schema(description = "페이지 크기. 한 페이지 당 반환되는 채팅방 개수이다.", example = "10") - int size + Integer size ) { + public SearchQuery { + if (size == null) { + size = 10; + } + } } } diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/common/response/SliceResponseTemplate.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/common/response/SliceResponseTemplate.java index f486b927..25ec3cb8 100644 --- a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/common/response/SliceResponseTemplate.java +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/common/response/SliceResponseTemplate.java @@ -9,7 +9,7 @@ @Schema(description = "페이징된 무한 스크롤 응답") public record SliceResponseTemplate( @Schema(description = "응답 컨텐츠 내용") - List content, + List contents, @Schema(description = "현재 페이지 번호") int currentPageNumber, @Schema(description = "페이지 크기") @@ -19,7 +19,7 @@ public record SliceResponseTemplate( @Schema(description = "다음 페이지 존재 여부") boolean hasNext ) { - public static SliceResponseTemplate of(@NonNull List content, @NonNull Pageable pageable, int numberOfElements, boolean hasNext) { - return new SliceResponseTemplate<>(content, pageable.getPageNumber(), pageable.getPageSize(), numberOfElements, hasNext); + public static SliceResponseTemplate of(@NonNull List contents, @NonNull Pageable pageable, int numberOfElements, boolean hasNext) { + return new SliceResponseTemplate<>(contents, pageable.getPageNumber(), pageable.getPageSize(), numberOfElements, hasNext); } }