From c0b4b96385ba52b4cc56d6c565ed1aa23d9db56d Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 15 Jul 2025 11:24:00 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20AuthController=EA=B0=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=ED=95=98=EB=8A=94=20AuthAPI=EB=A5=BC=20auth/web=20->?= =?UTF-8?q?=20auth/docs=20=ED=8C=A8=ED=82=A4=EC=A7=80=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/roomescape/auth/docs/AuthAPI.kt | 63 +++++++++++++++++ src/main/java/roomescape/auth/web/AuthAPI.kt | 67 ------------------- 2 files changed, 63 insertions(+), 67 deletions(-) create mode 100644 src/main/java/roomescape/auth/docs/AuthAPI.kt delete mode 100644 src/main/java/roomescape/auth/web/AuthAPI.kt diff --git a/src/main/java/roomescape/auth/docs/AuthAPI.kt b/src/main/java/roomescape/auth/docs/AuthAPI.kt new file mode 100644 index 00000000..c0ef2516 --- /dev/null +++ b/src/main/java/roomescape/auth/docs/AuthAPI.kt @@ -0,0 +1,63 @@ +package roomescape.auth.docs + +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.Parameter +import io.swagger.v3.oas.annotations.media.Content +import io.swagger.v3.oas.annotations.media.Schema +import io.swagger.v3.oas.annotations.responses.ApiResponse +import io.swagger.v3.oas.annotations.responses.ApiResponses +import io.swagger.v3.oas.annotations.tags.Tag +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import jakarta.validation.Valid +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.RequestBody +import roomescape.auth.web.LoginCheckResponse +import roomescape.auth.web.LoginRequest +import roomescape.auth.web.support.LoginRequired +import roomescape.auth.web.support.MemberId +import roomescape.common.docs.EmptyResponseSpec +import roomescape.common.docs.ResponseSpec +import roomescape.common.dto.response.CommonApiResponse + +@Tag(name = "1. 인증 / 인가 API", description = "로그인, 로그아웃 및 로그인 상태를 확인합니다") +interface AuthAPI { + @Operation(summary = "로그인") + @ApiResponses( + ApiResponse( + responseCode = "200", + description = "로그인 성공시 쿠키에 토큰 정보를 저장합니다.", + content = [Content(schema = Schema(implementation = EmptyResponseSpec::class))] + ), + ) + fun login( + @Valid @RequestBody loginRequest: LoginRequest + ): ResponseEntity> + + @Operation(summary = "로그인 상태 확인") + @ApiResponses( + ApiResponse( + responseCode = "200", + description = "로그인 상태이며, 로그인된 회원의 이름을 반환합니다.", + content = [Content(schema = Schema(implementation = LoginCheckResponseSpec::class))] + ), + ) + fun checkLogin( + @MemberId @Parameter(hidden = true) memberId: Long + ): ResponseEntity> + + @LoginRequired + @Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) + @ApiResponses( + ApiResponse( + responseCode = "200", + description = "로그아웃 성공시 쿠키에 저장된 토큰 정보를 삭제합니다.", + content = [Content(schema = Schema(implementation = EmptyResponseSpec::class))] + ), + ) + fun logout(): ResponseEntity> +} + +data class LoginCheckResponseSpec( + override val data: LoginCheckResponse = LoginCheckResponse(name = "sangdol") +) : ResponseSpec diff --git a/src/main/java/roomescape/auth/web/AuthAPI.kt b/src/main/java/roomescape/auth/web/AuthAPI.kt deleted file mode 100644 index 96414d25..00000000 --- a/src/main/java/roomescape/auth/web/AuthAPI.kt +++ /dev/null @@ -1,67 +0,0 @@ -package roomescape.auth.web - -import io.swagger.v3.oas.annotations.Operation -import io.swagger.v3.oas.annotations.Parameter -import io.swagger.v3.oas.annotations.media.Content -import io.swagger.v3.oas.annotations.media.Schema -import io.swagger.v3.oas.annotations.responses.ApiResponse -import io.swagger.v3.oas.annotations.responses.ApiResponses -import io.swagger.v3.oas.annotations.tags.Tag -import jakarta.servlet.http.HttpServletRequest -import jakarta.servlet.http.HttpServletResponse -import jakarta.validation.Valid -import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.ResponseStatus -import roomescape.auth.web.support.LoginRequired -import roomescape.auth.web.support.MemberId -import roomescape.common.dto.response.RoomescapeErrorResponse -import roomescape.common.dto.response.RoomescapeApiResponse - -@Tag(name = "1. 인증 / 인가 API", description = "로그인, 로그아웃 및 로그인 상태를 확인합니다") -interface AuthAPI { - - @ResponseStatus(HttpStatus.OK) - @Operation(summary = "로그인") - @ApiResponses( - ApiResponse( - responseCode = "200", - description = "로그인 성공시 쿠키에 토큰 정보를 저장합니다." - ), - ApiResponse( - responseCode = "400", - description = "존재하지 않는 회원이거나, 이메일 또는 비밀번호가 잘못 입력되었습니다.", - content = [Content(schema = Schema(implementation = RoomescapeErrorResponse::class))] - ) - ) - fun login( - @Valid @RequestBody loginRequest: LoginRequest, - response: HttpServletResponse - ): RoomescapeApiResponse - - @ResponseStatus(HttpStatus.OK) - @Operation(summary = "로그인 상태 확인") - @ApiResponses( - ApiResponse( - responseCode = "200", - description = "로그인 상태이며, 로그인된 회원의 이름을 반환합니다." - ), - ApiResponse( - responseCode = "400", - description = "쿠키에 있는 토큰 정보로 회원을 조회할 수 없습니다.", - content = [Content(schema = Schema(implementation = RoomescapeErrorResponse::class))] - ), - ApiResponse( - responseCode = "401", - description = "토큰 정보가 없거나, 만료되었습니다.", - content = [Content(schema = Schema(implementation = RoomescapeErrorResponse::class))] - ) - ) - fun checkLogin(@MemberId @Parameter(hidden = true) memberId: Long): RoomescapeApiResponse - - @LoginRequired - @ResponseStatus(HttpStatus.OK) - @Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) - @ApiResponses(ApiResponse(responseCode = "200", description = "로그아웃 성공시 쿠키에 저장된 토큰 정보를 삭제합니다.")) - fun logout(request: HttpServletRequest, response: HttpServletResponse): RoomescapeApiResponse -}