package roomescape.auth.docs import io.swagger.v3.oas.annotations.Operation 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.LoginRequest import roomescape.auth.web.LoginSuccessResponse import roomescape.auth.web.support.CurrentUser import roomescape.auth.web.support.Public import roomescape.common.dto.CurrentUserContext import roomescape.common.dto.response.CommonApiResponse @Tag(name = "1. 인증 / 인가 API", description = "로그인, 로그아웃 및 로그인 상태를 확인합니다") interface AuthAPI { @Public @Operation(summary = "로그인") @ApiResponses( ApiResponse(responseCode = "200", description = "로그인 성공시 토큰을 반환합니다."), ) fun login( @Valid @RequestBody loginRequest: LoginRequest, servletRequest: HttpServletRequest ): ResponseEntity> @Operation(summary = "로그인 상태 확인") @ApiResponses( ApiResponse( responseCode = "200", description = "입력된 ID / 결과(Boolean)을 반환합니다.", useReturnTypeSchema = true ), ) fun checkLogin( @CurrentUser user: CurrentUserContext ): ResponseEntity> @Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) @ApiResponses( ApiResponse(responseCode = "200"), ) fun logout( @CurrentUser user: CurrentUserContext, servletResponse: HttpServletResponse ): ResponseEntity> }