From 53af0265c22dd4040dae70ca929db737aaf987d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=ED=99=8D=EC=A0=9C?= Date: Sun, 8 Dec 2024 00:33:31 +0900 Subject: [PATCH] =?UTF-8?q?MATE-115=20:=20[FEAT]=20=EA=B5=BF=EC=A6=88?= =?UTF-8?q?=EA=B1=B0=EB=9E=98=20=EC=B1=84=ED=8C=85=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20Swagger=20=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20(#104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MATE-115 : [FEAT] GoodsChatRoomController 클래스 Swagger 문서 작성 * MATE-115 : [REFACTOR] Jwt 필터에 Swagger 경로 인증 제외 --- .../mate/common/config/SecurityConfig.java | 2 - .../mate/common/config/SwaggerConfig.java | 4 -- .../security/filter/JwtCheckFilter.java | 1 + .../controller/GoodsChatRoomController.java | 44 ++++++++++++++----- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/example/mate/common/config/SecurityConfig.java b/src/main/java/com/example/mate/common/config/SecurityConfig.java index 0d296f01..507ef6c8 100644 --- a/src/main/java/com/example/mate/common/config/SecurityConfig.java +++ b/src/main/java/com/example/mate/common/config/SecurityConfig.java @@ -1,7 +1,5 @@ package com.example.mate.common.config; -//import com.example.mate.common.security.filter.JwtCheckFilter; - import com.example.mate.common.security.filter.JwtCheckFilter; import java.util.List; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/example/mate/common/config/SwaggerConfig.java b/src/main/java/com/example/mate/common/config/SwaggerConfig.java index 862b8e76..b761482f 100644 --- a/src/main/java/com/example/mate/common/config/SwaggerConfig.java +++ b/src/main/java/com/example/mate/common/config/SwaggerConfig.java @@ -5,12 +5,9 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; -import io.swagger.v3.oas.models.servers.Server; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.List; - @Configuration public class SwaggerConfig { @Bean @@ -22,7 +19,6 @@ public OpenAPI openAPI() { return new OpenAPI() .info(info) - .servers(List.of(new Server().url("http://localhost:8080"))) .addSecurityItem(new SecurityRequirement().addList("Bearer Authentication")) .components(new Components().addSecuritySchemes("Bearer Authentication", createAPIKeyScheme())); } diff --git a/src/main/java/com/example/mate/common/security/filter/JwtCheckFilter.java b/src/main/java/com/example/mate/common/security/filter/JwtCheckFilter.java index ee324171..83f394bf 100644 --- a/src/main/java/com/example/mate/common/security/filter/JwtCheckFilter.java +++ b/src/main/java/com/example/mate/common/security/filter/JwtCheckFilter.java @@ -72,6 +72,7 @@ private boolean isExcludedPath(String requestURI) { requestURI.startsWith("/api/auth") || requestURI.startsWith("/api/members/join") || requestURI.startsWith("/swagger-ui") || + requestURI.startsWith("/v3/api-docs") || requestURI.startsWith("/api/members/login"); } diff --git a/src/main/java/com/example/mate/domain/goodsChat/controller/GoodsChatRoomController.java b/src/main/java/com/example/mate/domain/goodsChat/controller/GoodsChatRoomController.java index 212eb3c4..727d36e6 100644 --- a/src/main/java/com/example/mate/domain/goodsChat/controller/GoodsChatRoomController.java +++ b/src/main/java/com/example/mate/domain/goodsChat/controller/GoodsChatRoomController.java @@ -9,6 +9,9 @@ import com.example.mate.domain.goodsChat.dto.response.GoodsChatRoomSummaryResponse; import com.example.mate.domain.goodsChat.service.GoodsChatService; import com.example.mate.domain.member.dto.response.MemberSummaryResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; @@ -25,51 +28,68 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/goods/chat") +@Tag(name = "GoodsChatRoomController", description = "굿즈거래 채팅방 관련 API") public class GoodsChatRoomController { private final GoodsChatService goodsChatService; @PostMapping - public ResponseEntity> createGoodsChatRoom(@AuthenticationPrincipal AuthMember member, - @RequestParam Long goodsPostId) { + @Operation(summary = "굿즈거래 채팅방 입장 및 생성", description = "굿즈 거래 게시글에 대한 채팅방을 생성하거나 기존 채팅방 정보를 조회합니다.") + public ResponseEntity> createGoodsChatRoom( + @AuthenticationPrincipal AuthMember member, + @Parameter(description = "판매글 ID", required = true) @RequestParam Long goodsPostId + ) { GoodsChatRoomResponse response = goodsChatService.getOrCreateGoodsChatRoom(member.getMemberId(), goodsPostId); return ResponseEntity.ok(ApiResponse.success(response)); } @GetMapping("/{chatRoomId}/message") + @Operation(summary = "굿즈거래 채팅방 메시지 조회", description = "지정된 채팅방의 메시지를 페이징 처리하여 조회합니다.") public ResponseEntity>> getGoodsChatRoomMessages( @AuthenticationPrincipal AuthMember member, - @PathVariable Long chatRoomId, - @ValidPageable Pageable pageable + @Parameter(description = "채팅방 ID", required = true) @PathVariable Long chatRoomId, + @Parameter(description = "페이징 정보") @ValidPageable Pageable pageable ) { PageResponse response = goodsChatService.getMessagesForChatRoom(chatRoomId, member.getMemberId(), pageable); return ResponseEntity.ok(ApiResponse.success(response)); } @GetMapping - public ResponseEntity>> getGoodsChatRooms(@AuthenticationPrincipal AuthMember member, - @ValidPageable Pageable pageable) { + @Operation(summary = "사용자의 굿즈거래 채팅방 목록 조회", description = "사용자가 참여 중인 굿즈거래 채팅방 목록을 조회합니다.") + public ResponseEntity>> getGoodsChatRooms( + @AuthenticationPrincipal AuthMember member, + @Parameter(description = "페이징 정보") @ValidPageable Pageable pageable + ) { PageResponse response = goodsChatService.getGoodsChatRooms(member.getMemberId(), pageable); return ResponseEntity.ok(ApiResponse.success(response)); } @DeleteMapping("/{chatRoomId}") - public ResponseEntity leaveGoodsChatRoom(@AuthenticationPrincipal AuthMember member, @PathVariable Long chatRoomId) { + @Operation(summary = "굿즈거래 채팅방 나가기", description = "사용자가 지정된 굿즈거래 채팅방을 나갑니다. 만약 모든 사용자가 나가면 채팅방이 삭제됩니다.") + public ResponseEntity leaveGoodsChatRoom( + @AuthenticationPrincipal AuthMember member, + @Parameter(description = "채팅방 ID", required = true) @PathVariable Long chatRoomId + ) { goodsChatService.deactivateGoodsChatPart(member.getMemberId(), chatRoomId); - return ResponseEntity.noContent().build(); } @GetMapping("/{chatRoomId}") - public ResponseEntity> getGoodsChatRoomInfo(@AuthenticationPrincipal AuthMember member, - @PathVariable Long chatRoomId) { + @Operation(summary = "굿즈거래 채팅방 입장", description = "굿즈 거래 채팅방의 정보를 조회합니다.") + public ResponseEntity> getGoodsChatRoomInfo( + @AuthenticationPrincipal AuthMember member, + @Parameter(description = "채팅방 ID", required = true) @PathVariable Long chatRoomId + ) { GoodsChatRoomResponse response = goodsChatService.getGoodsChatRoomInfo(member.getMemberId(), chatRoomId); return ResponseEntity.ok(ApiResponse.success(response)); } @GetMapping("/{chatRoomId}/members") - public ResponseEntity>> getGoodsChatRoomMembers(@AuthenticationPrincipal AuthMember member, - @PathVariable Long chatRoomId) { + @Operation(summary = "굿즈거래 채팅방 인원 조회", description = "지정된 채팅방에 참여 중인 사용자 목록을 조회합니다.") + public ResponseEntity>> getGoodsChatRoomMembers( + @AuthenticationPrincipal AuthMember member, + @Parameter(description = "채팅방 ID", required = true) @PathVariable Long chatRoomId + ) { List responses = goodsChatService.getChatRoomMembers(member.getMemberId(), chatRoomId); return ResponseEntity.ok(ApiResponse.success(responses)); }