diff --git a/src/main/java/umc/codeplay/controller/AuthController.java b/src/main/java/umc/codeplay/controller/AuthController.java index 0a22d2f..eeb9020 100644 --- a/src/main/java/umc/codeplay/controller/AuthController.java +++ b/src/main/java/umc/codeplay/controller/AuthController.java @@ -16,6 +16,8 @@ import lombok.RequiredArgsConstructor; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import umc.codeplay.apiPayLoad.ApiResponse; import umc.codeplay.apiPayLoad.code.status.ErrorStatus; import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler; @@ -32,6 +34,7 @@ @RequestMapping("/auth") @RequiredArgsConstructor @Validated +@Tag(name = "auth-controller", description = "인증 관련 처리 API, 전부 JWT 토큰 헤더 포함을 필요로 하지 않습니다.") public class AuthController { private final AuthenticationManager authenticationManager; @@ -40,6 +43,9 @@ public class AuthController { private final EmailService emailService; @PostMapping("/login") + @Operation( + summary = "이메일/비밀번호를 사용해 로그인합니다.", + description = "JWT 토큰/리프레시 토큰을 반환합니다. 소셜 로그인 계정으로 로그인 안됩니다.") public ApiResponse login( @Validated @RequestBody MemberRequestDTO.LoginDto request) { if (memberService.getSocialStatus(request.getEmail()) != SocialStatus.NONE) { @@ -69,6 +75,9 @@ public ApiResponse login( } @PostMapping("/signup") + @Operation( + summary = "이메일/비밀번호를 사용해 회원가입합니다.", + description = "JWT 토큰을 반환해 주지 않습니다. 로그인 API 를 사용해주세요.") public ApiResponse join( @Validated @RequestBody MemberRequestDTO.JoinDto request) { Member member = memberService.joinMember(request); @@ -78,6 +87,9 @@ public ApiResponse join( } @PostMapping("/refresh") + @Operation( + summary = "리프레시 토큰을 사용해 액세스 토큰을 갱신합니다.", + description = "Refresh-Token 헤더를 사용해야 합니다. 리프레시 토큰 유효기간은 24시간이며, 만료 시 재로그인 해야 합니다.") public ApiResponse refresh( @RequestHeader("Refresh-Token") @NotNull(message = "리프레시 토큰은 필수 헤더입니다.") String refreshToken, @Validated @RequestParam("email") @NotBlank(message = "이메일은 필수 입력값입니다.") String email) { diff --git a/src/main/java/umc/codeplay/controller/OAuthController.java b/src/main/java/umc/codeplay/controller/OAuthController.java index 0924963..9564851 100644 --- a/src/main/java/umc/codeplay/controller/OAuthController.java +++ b/src/main/java/umc/codeplay/controller/OAuthController.java @@ -15,6 +15,8 @@ import lombok.RequiredArgsConstructor; import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import umc.codeplay.apiPayLoad.ApiResponse; import umc.codeplay.apiPayLoad.code.status.ErrorStatus; import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler; @@ -31,6 +33,7 @@ @RequestMapping("/oauth") @RequiredArgsConstructor @Validated +@Tag(name = "oauth-controller", description = "외부 소셜 로그인 서비스 연동 API, JWT 토큰 헤더 포함을 필요로 하지 않습니다.") public class OAuthController { private final JwtUtil jwtUtil; @@ -40,6 +43,10 @@ public class OAuthController { private final MemberService memberService; @GetMapping("/authorize/{provider}") + @Operation( + summary = "소셜 로그인 서비스로 로그인합니다.", + description = + "{provider}엔 google, kakao 가 들어갈 수 있습니다. 해당 소셜 로그인 서비스로 리다이렉트합니다. 로그인이 완료되면 스프링 서버에서 사용 가능한 JWT 토큰/리프레시 토큰을 반환합니다.") public RedirectView redirectToOAuth(@PathVariable("provider") String provider) { // CSRF 방어용 state, PKCE(code_challenge)..는 굳이 BaseOAuthProperties properties =