From d33fbee02146005103bbf6af9a2a8f91889db7f4 Mon Sep 17 00:00:00 2001 From: hojooo Date: Sun, 3 Aug 2025 13:12:02 +0900 Subject: [PATCH 1/3] docs: add swagger groupedOpenApi --- .../moim/config/swagger/SwaggerConfig.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java b/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java index 274e8b9..93b198d 100644 --- a/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java +++ b/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java @@ -5,6 +5,7 @@ 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 org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,4 +32,42 @@ public OpenAPI customOpenAPI() { .addSecuritySchemes("BearerAuth", bearerAuthScheme)) .addSecurityItem(securityRequirement); } + + private GroupedOpenApi buildGroupedOpenApi(String group, String basePackage) { + return GroupedOpenApi.builder() + .group(group) + .pathsToMatch("/api/v1/**") + .packagesToScan(basePackage) + .build(); + } + + @Bean + public GroupedOpenApi moinApi() { + return buildGroupedOpenApi("모임 관련 API @오남의", "com.example.moim.club.controller"); + } + + @Bean + public GroupedOpenApi notificationApi() { + return buildGroupedOpenApi("알림 관련 API @최예빈", "com.example.moim.notification.controller"); + } + + @Bean + public GroupedOpenApi matchApi() { + return buildGroupedOpenApi("매치 관련 API @문호주", "com.example.moim.match.controller"); + } + + @Bean + public GroupedOpenApi statisticApi() { + return buildGroupedOpenApi("전적 관련 API@문호주", "com.example.moim.statistic.controller"); + } + + @Bean + public GroupedOpenApi scheduleApi() { + return buildGroupedOpenApi("스케줄 관련 API@오남의", "com.example.moim.schedule.controller"); + } + + @Bean + public GroupedOpenApi userApi() { + return buildGroupedOpenApi("유저 관련 API@최예빈", "com.example.moim.user.controller"); + } } From ff95bec2cd16dd064323f81c425fe91aa3203e42 Mon Sep 17 00:00:00 2001 From: hojooo Date: Sun, 3 Aug 2025 13:12:55 +0900 Subject: [PATCH 2/3] fix: swagger default path --- .../java/com/example/moim/config/swagger/SwaggerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java b/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java index 93b198d..9dbcf2b 100644 --- a/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java +++ b/src/main/java/com/example/moim/config/swagger/SwaggerConfig.java @@ -36,7 +36,7 @@ public OpenAPI customOpenAPI() { private GroupedOpenApi buildGroupedOpenApi(String group, String basePackage) { return GroupedOpenApi.builder() .group(group) - .pathsToMatch("/api/v1/**") +// .pathsToMatch("/api/v1/**") .packagesToScan(basePackage) .build(); } From d4beca7b20fef5c1bc4a21cdae452598594ce8c7 Mon Sep 17 00:00:00 2001 From: hojooo Date: Sun, 3 Aug 2025 13:41:33 +0900 Subject: [PATCH 3/3] docs: add match/statistic controller docs --- .../match/controller/MatchController.java | 2 +- .../match/controller/MatchControllerDocs.java | 83 +++++++++++++++++++ .../controller/StatisticController.java | 2 +- .../controller/StatisticControllerDocs.java | 15 ++++ 4 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/moim/match/controller/MatchControllerDocs.java create mode 100644 src/main/java/com/example/moim/statistic/controller/StatisticControllerDocs.java diff --git a/src/main/java/com/example/moim/match/controller/MatchController.java b/src/main/java/com/example/moim/match/controller/MatchController.java index 06b955b..0092f20 100644 --- a/src/main/java/com/example/moim/match/controller/MatchController.java +++ b/src/main/java/com/example/moim/match/controller/MatchController.java @@ -19,7 +19,7 @@ @RestController @RequiredArgsConstructor -public class MatchController { +public class MatchController implements MatchControllerDocs { private final MatchService matchService; private final ClubRepository clubRepository; private final MatchRepository matchRepository; diff --git a/src/main/java/com/example/moim/match/controller/MatchControllerDocs.java b/src/main/java/com/example/moim/match/controller/MatchControllerDocs.java new file mode 100644 index 0000000..138fb55 --- /dev/null +++ b/src/main/java/com/example/moim/match/controller/MatchControllerDocs.java @@ -0,0 +1,83 @@ +package com.example.moim.match.controller; + +import com.example.moim.global.exception.BaseResponse; +import com.example.moim.match.dto.*; +import com.example.moim.user.dto.UserDetailsImpl; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@Tag(name = "매치 api", description = "매치 관련 api") +public interface MatchControllerDocs { + @Operation(summary = "매치 생성") + BaseResponse matchSave(@RequestBody @Valid MatchInput matchInput, @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 등록") + BaseResponse matchRegister(@RequestBody @Valid MatchRegInput matchRegInput, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 생성 취소") + BaseResponse matchCreationCancel(@RequestParam Long matchId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 신청 생성") + BaseResponse matchApplySave(@RequestParam Long matchId, + @RequestParam Long clubId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 신청 취소") + BaseResponse matchApplyCancel(@RequestParam Long matchId, + @RequestParam Long clubId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 신청 완료") + BaseResponse matchApply(@RequestBody @Valid MatchApplyInput matchApplyInput, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + + @Operation(summary = "매치 초청") + BaseResponse matchInvite(@RequestParam Long matchId, + @RequestParam Long clubId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 확정") + BaseResponse matchConfirm(@RequestParam Long matchId, + @RequestParam Long clubId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 확정 취소") + BaseResponse cancelConfirmedMatch(@RequestParam Long matchId, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "등록된 매치 검색") + BaseResponse> findMatches(@AuthenticationPrincipal UserDetailsImpl userDetailsImpl, + @ModelAttribute MatchSearchCond matchSearchCond); + + @Operation(summary = "확정된(매치성사된) 매치 리스트") + BaseResponse> findConfirmedMatches(@AuthenticationPrincipal UserDetailsImpl userDetailsImpl, + @PathVariable Long clubId); + + @Operation(summary = "활동 지역 소재 모임 리스트") + BaseResponse> findMatchClubs(@AuthenticationPrincipal UserDetailsImpl userDetailsImpl, + @ModelAttribute MatchClubSearchCond matchClubSearchCond, + @PathVariable Long clubId); + + @Operation(summary = "매치 등록/신청 현황") + BaseResponse> getMatchStatus(@PathVariable Long clubId); + + + @Operation(summary = "매치 결과 기록") + BaseResponse matchRecordSave(@PathVariable Long matchId, + @RequestBody @Valid MatchRecordInput matchRecordInput, + @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); + + @Operation(summary = "매치 메인 페이지(대시보드)") + BaseResponse findMatchMain(@PathVariable Long clubId, @AuthenticationPrincipal UserDetailsImpl userDetailsImpl); +} diff --git a/src/main/java/com/example/moim/statistic/controller/StatisticController.java b/src/main/java/com/example/moim/statistic/controller/StatisticController.java index 9a8ff02..c99d5a2 100644 --- a/src/main/java/com/example/moim/statistic/controller/StatisticController.java +++ b/src/main/java/com/example/moim/statistic/controller/StatisticController.java @@ -9,7 +9,7 @@ @RestController @RequiredArgsConstructor -public class StatisticController { +public class StatisticController implements StatisticControllerDocs { private StatisticService statisticService; // 전적 조회(전적 메인) diff --git a/src/main/java/com/example/moim/statistic/controller/StatisticControllerDocs.java b/src/main/java/com/example/moim/statistic/controller/StatisticControllerDocs.java new file mode 100644 index 0000000..ac1b206 --- /dev/null +++ b/src/main/java/com/example/moim/statistic/controller/StatisticControllerDocs.java @@ -0,0 +1,15 @@ +package com.example.moim.statistic.controller; + +import com.example.moim.global.exception.BaseResponse; +import com.example.moim.statistic.dto.StatisticDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; + +@Tag(name = "전적 api", description = "전적 관련 api") +public interface StatisticControllerDocs { + @Operation(summary = "전적 조회") + BaseResponse getStatistic(@PathVariable Long clubId, + @RequestBody StatisticDTO.StatisticInput request); +}