package roomescape.auth.docs import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.Parameter 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.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.dto.response.CommonApiResponse @Tag(name = "1. 인증 / 인가 API", description = "로그인, 로그아웃 및 로그인 상태를 확인합니다") interface AuthAPI { @Operation(summary = "로그인") @ApiResponses( ApiResponse(responseCode = "200", description = "로그인 성공시 쿠키에 토큰 정보를 저장합니다."), ) fun login( @Valid @RequestBody loginRequest: LoginRequest ): ResponseEntity> @Operation(summary = "로그인 상태 확인") @ApiResponses( ApiResponse( responseCode = "200", description = "로그인 상태이며, 로그인된 회원의 이름을 반환합니다.", useReturnTypeSchema = true ), ) fun checkLogin( @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> @LoginRequired @Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) @ApiResponses( ApiResponse(responseCode = "200", description = "로그아웃 성공시 쿠키에 저장된 토큰 정보를 삭제합니다."), ) fun logout(): ResponseEntity> }