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..9dbcf2b 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"); + } } 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); +}