refactor: API 인터페이스 간결화 및 일부 오타 수정

This commit is contained in:
이상진 2025-09-18 20:23:49 +09:00
parent 5f546f87da
commit 08af1c7084
9 changed files with 63 additions and 89 deletions

View File

@ -3,7 +3,6 @@ package roomescape.auth.docs
import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.responses.ApiResponse import io.swagger.v3.oas.annotations.responses.ApiResponse
import io.swagger.v3.oas.annotations.responses.ApiResponses 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.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse import jakarta.servlet.http.HttpServletResponse
import jakarta.validation.Valid import jakarta.validation.Valid
@ -11,28 +10,23 @@ import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestBody
import roomescape.auth.web.LoginRequest import roomescape.auth.web.LoginRequest
import roomescape.auth.web.LoginSuccessResponse import roomescape.auth.web.LoginSuccessResponse
import roomescape.auth.web.support.User
import roomescape.auth.web.support.Public import roomescape.auth.web.support.Public
import roomescape.auth.web.support.User
import roomescape.common.dto.CurrentUserContext import roomescape.common.dto.CurrentUserContext
import roomescape.common.dto.response.CommonApiResponse import roomescape.common.dto.response.CommonApiResponse
@Tag(name = "1. 인증 / 인가 API", description = "로그인, 로그아웃 및 로그인 상태를 확인합니다")
interface AuthAPI { interface AuthAPI {
@Public @Public
@Operation(summary = "로그인") @Operation(summary = "로그인")
@ApiResponses( @ApiResponses(ApiResponse(responseCode = "200"))
ApiResponse(responseCode = "200", description = "로그인 성공시 토큰을 반환합니다."),
)
fun login( fun login(
@Valid @RequestBody loginRequest: LoginRequest, @Valid @RequestBody loginRequest: LoginRequest,
servletRequest: HttpServletRequest servletRequest: HttpServletRequest
): ResponseEntity<CommonApiResponse<LoginSuccessResponse>> ): ResponseEntity<CommonApiResponse<LoginSuccessResponse>>
@Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) @Operation(summary = "로그아웃")
@ApiResponses( @ApiResponses(ApiResponse(responseCode = "200"))
ApiResponse(responseCode = "200"),
)
fun logout( fun logout(
@User user: CurrentUserContext, @User user: CurrentUserContext,
servletResponse: HttpServletResponse servletResponse: HttpServletResponse

View File

@ -18,16 +18,15 @@ import roomescape.payment.web.PaymentCreateResponse
interface PaymentAPI { interface PaymentAPI {
@UserOnly @UserOnly
@Operation(summary = "결제 승인", tags = ["로그인이 필요한 API"]) @Operation(summary = "결제 승인")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun confirmPayment( fun confirmPayment(
@RequestParam(required = true) reservationId: Long, @RequestParam(required = true) reservationId: Long,
@Valid @RequestBody request: PaymentConfirmRequest @Valid @RequestBody request: PaymentConfirmRequest
): ResponseEntity<CommonApiResponse<PaymentCreateResponse>> ): ResponseEntity<CommonApiResponse<PaymentCreateResponse>>
@UserOnly @Operation(summary = "결제 취소")
@Operation(summary = "결제 취소", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun cancelPayment( fun cancelPayment(
@User user: CurrentUserContext, @User user: CurrentUserContext,
@Valid @RequestBody request: PaymentCancelRequest @Valid @RequestBody request: PaymentCancelRequest

View File

@ -15,7 +15,7 @@ interface RegionAPI {
@Public @Public
@Operation(summary = "지역 코드 조회") @Operation(summary = "지역 코드 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findRegionCode( fun findRegionCode(
@RequestParam(name = "sidoCode", required = true) sidoCode: String, @RequestParam(name = "sidoCode", required = true) sidoCode: String,
@RequestParam(name = "sigunguCode", required = true) sigunguCode: String, @RequestParam(name = "sigunguCode", required = true) sigunguCode: String,
@ -23,12 +23,12 @@ interface RegionAPI {
@Public @Public
@Operation(summary = "모든 시 / 도 목록 조회") @Operation(summary = "모든 시 / 도 목록 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun readAllSido(): ResponseEntity<CommonApiResponse<SidoListResponse>> fun readAllSido(): ResponseEntity<CommonApiResponse<SidoListResponse>>
@Public @Public
@Operation(summary = "모든 시 / 군 / 구 목록 조회") @Operation(summary = "모든 시 / 군 / 구 목록 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findAllSigunguBySido( fun findAllSigunguBySido(
@RequestParam(required = true) sidoCode: String @RequestParam(required = true) sidoCode: String
): ResponseEntity<CommonApiResponse<SigunguListResponse>> ): ResponseEntity<CommonApiResponse<SigunguListResponse>>

View File

@ -18,45 +18,43 @@ import roomescape.reservation.web.*
interface ReservationAPI { interface ReservationAPI {
@Public @Public
@Operation(summary = "가장 많이 예약된 테마 조회") @Operation(summary = "가장 많이 예약된 테마 ID 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findMostReservedThemeIds( fun findMostReservedThemeIds(
@RequestParam count: Int @RequestParam count: Int
): ResponseEntity<CommonApiResponse<MostReservedThemeIdListResponse>> ): ResponseEntity<CommonApiResponse<MostReservedThemeIdListResponse>>
@UserOnly @Operation(summary = "결제 전 임시 예약 저장")
@Operation(summary = "결제 대기 예약 저장", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun createPendingReservation( fun createPendingReservation(
@User user: CurrentUserContext, @User user: CurrentUserContext,
@Valid @RequestBody request: PendingReservationCreateRequest @Valid @RequestBody request: PendingReservationCreateRequest
): ResponseEntity<CommonApiResponse<PendingReservationCreateResponse>> ): ResponseEntity<CommonApiResponse<PendingReservationCreateResponse>>
@UserOnly @UserOnly
@Operation(summary = "예약 확정", tags = ["로그인이 필요한 API"]) @Operation(summary = "결제 후 임시 예약 확정")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200"))
fun confirmReservation( fun confirmReservation(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@Operation(summary = "예약 취소", tags = ["로그인이 필요한 API"]) @Operation(summary = "예약 취소")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200"))
fun cancelReservation( fun cancelReservation(
@User user: CurrentUserContext, @User user: CurrentUserContext,
@PathVariable id: Long, @PathVariable id: Long,
@Valid @RequestBody request: ReservationCancelRequest @Valid @RequestBody request: ReservationCancelRequest
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@UserOnly @Operation(summary = "회원별 예약 요약 목록 조회")
@Operation(summary = "회원별 예약 요약 목록 조회", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun findSummaryByMemberId( fun findSummaryByMemberId(
@User user: CurrentUserContext, @User user: CurrentUserContext,
): ResponseEntity<CommonApiResponse<ReservationSummaryListResponse>> ): ResponseEntity<CommonApiResponse<ReservationSummaryListResponse>>
@UserOnly @UserOnly
@Operation(summary = "특정 예약에 대한 상세 조회", tags = ["로그인이 필요한 API"]) @Operation(summary = "특정 예약에 대한 상세 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findDetailById( fun findDetailById(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<ReservationDetailResponse>> ): ResponseEntity<CommonApiResponse<ReservationDetailResponse>>

View File

@ -22,7 +22,7 @@ import java.time.LocalDate
interface AdminScheduleAPI { interface AdminScheduleAPI {
@AdminOnly(privilege = Privilege.READ_SUMMARY) @AdminOnly(privilege = Privilege.READ_SUMMARY)
@Operation(summary = "일정 검색", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "관리자 페이지에서 일정 요약 목록 조회")
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun searchSchedules( fun searchSchedules(
@PathVariable("storeId") storeId: Long, @PathVariable("storeId") storeId: Long,
@ -31,14 +31,14 @@ interface AdminScheduleAPI {
): ResponseEntity<CommonApiResponse<AdminScheduleSummaryListResponse>> ): ResponseEntity<CommonApiResponse<AdminScheduleSummaryListResponse>>
@AdminOnly(privilege = Privilege.READ_DETAIL) @AdminOnly(privilege = Privilege.READ_DETAIL)
@Operation(summary = "일정 상세 조회", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "관지라 페이지에서 특정 예약의 일정 상세 조회")
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findScheduleAudit( fun findScheduleAudit(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<AuditInfo>> ): ResponseEntity<CommonApiResponse<AuditInfo>>
@AdminOnly(type = AdminType.STORE, privilege = Privilege.CREATE) @AdminOnly(type = AdminType.STORE, privilege = Privilege.CREATE)
@Operation(summary = "일정 생성", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "일정 생성")
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun createSchedule( fun createSchedule(
@PathVariable("storeId") storeId: Long, @PathVariable("storeId") storeId: Long,
@ -46,16 +46,16 @@ interface AdminScheduleAPI {
): ResponseEntity<CommonApiResponse<ScheduleCreateResponse>> ): ResponseEntity<CommonApiResponse<ScheduleCreateResponse>>
@AdminOnly(type = AdminType.STORE, privilege = Privilege.UPDATE) @AdminOnly(type = AdminType.STORE, privilege = Privilege.UPDATE)
@Operation(summary = "일정 수정", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "일정 수정")
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200"))
fun updateSchedule( fun updateSchedule(
@PathVariable("id") id: Long, @PathVariable("id") id: Long,
@Valid @RequestBody request: ScheduleUpdateRequest @Valid @RequestBody request: ScheduleUpdateRequest
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@AdminOnly(type = AdminType.STORE, privilege = Privilege.DELETE) @AdminOnly(type = AdminType.STORE, privilege = Privilege.DELETE)
@Operation(summary = "일정 삭제", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "일정 삭제")
@ApiResponses(ApiResponse(responseCode = "204", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "204"))
fun deleteSchedule( fun deleteSchedule(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@ -63,14 +63,8 @@ interface AdminScheduleAPI {
interface UserScheduleAPI { interface UserScheduleAPI {
@UserOnly @UserOnly
@Operation(summary = "일정을 Hold 상태로 변경", tags = ["로그인이 필요한 API"]) @Operation(summary = "중복 방지를 위해 일정을 Hold 상태로 변경")
@ApiResponses( @ApiResponses(ApiResponse(responseCode = "200"))
ApiResponse(
responseCode = "200",
description = "일정을 Hold 상태로 변경하여 중복 예약 방지",
useReturnTypeSchema = true
)
)
fun holdSchedule( fun holdSchedule(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@ -78,8 +72,8 @@ interface UserScheduleAPI {
interface PublicScheduleAPI { interface PublicScheduleAPI {
@Public @Public
@Operation(summary = "특정 날짜 + 매장의 일정 조회") @Operation(summary = "특정 날짜 + 매장의 모든 일정 조회")
@ApiResponses(ApiResponse(useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun getStoreSchedulesByDate( fun getStoreSchedulesByDate(
@PathVariable("storeId") storeId: Long, @PathVariable("storeId") storeId: Long,
@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate

View File

@ -32,7 +32,7 @@ interface AdminStoreAPI {
@AdminOnly(type = AdminType.STORE, privilege = Privilege.UPDATE) @AdminOnly(type = AdminType.STORE, privilege = Privilege.UPDATE)
@Operation(summary = "매장 정보 수정") @Operation(summary = "매장 정보 수정")
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200"))
fun updateStore( fun updateStore(
@PathVariable id: Long, @PathVariable id: Long,
@Valid @RequestBody request: StoreUpdateRequest @Valid @RequestBody request: StoreUpdateRequest
@ -40,7 +40,7 @@ interface AdminStoreAPI {
@AdminOnly(type = AdminType.HQ, privilege = Privilege.DELETE) @AdminOnly(type = AdminType.HQ, privilege = Privilege.DELETE)
@Operation(summary = "매장 비활성화") @Operation(summary = "매장 비활성화")
@ApiResponses(ApiResponse(responseCode = "204", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "204"))
fun disableStore( fun disableStore(
@PathVariable id: Long @PathVariable id: Long
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>

View File

@ -1,5 +1,6 @@
package roomescape.store.infrastructure.persistence package roomescape.store.infrastructure.persistence
import com.fasterxml.jackson.databind.util.Named
import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query import org.springframework.data.jpa.repository.Query
@ -26,8 +27,13 @@ interface StoreRepository : JpaRepository<StoreEntity, Long> {
StoreEntity s StoreEntity s
WHERE WHERE
s.status = roomescape.store.infrastructure.persistence.StoreStatus.ACTIVE s.status = roomescape.store.infrastructure.persistence.StoreStatus.ACTIVE
AND (:regionCode IS NULL OR s.regionCode LIKE ':regionCode%') AND (:regionCode IS NULL OR s.regionCode LIKE :regionCode%)
""" """
) )
fun findAllActiveStoresByRegion(regionCode: String?): List<StoreEntity> fun findAllActiveStoresByRegion(regionCode: String?): List<StoreEntity>
fun existsByName(name: String): Boolean
fun existsByContact(contact: String): Boolean
fun existsByAddress(address: String): Boolean
fun existsByBusinessRegNum(businessRegNum: String): Boolean
} }

View File

@ -15,49 +15,49 @@ import roomescape.auth.web.support.Public
import roomescape.common.dto.response.CommonApiResponse import roomescape.common.dto.response.CommonApiResponse
import roomescape.theme.web.* import roomescape.theme.web.*
@Tag(name = "5. 관리자 테마 API", description = "관리자 페이지에서 테마를 조회 / 추가 / 삭제할 때 사용합니다.")
interface AdminThemeAPI { interface AdminThemeAPI {
@AdminOnly(type = AdminType.HQ, privilege = Privilege.READ_SUMMARY) @AdminOnly(type = AdminType.HQ, privilege = Privilege.READ_SUMMARY)
@Operation(summary = "모든 테마 조회", description = "관리자 페이지에서 요약된 테마 목록을 조회합니다.", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "모든 테마 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun getAdminThemeSummaries(): ResponseEntity<CommonApiResponse<AdminThemeSummaryListResponse>> fun getAdminThemeSummaries(): ResponseEntity<CommonApiResponse<AdminThemeSummaryListResponse>>
@AdminOnly(type = AdminType.HQ, privilege = Privilege.READ_DETAIL) @AdminOnly(type = AdminType.HQ, privilege = Privilege.READ_DETAIL)
@Operation(summary = "테마 상세 조회", description = "해당 테마의 상세 정보를 조회합니다.", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "테마 상세 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findAdminThemeDetail(@PathVariable("id") id: Long): ResponseEntity<CommonApiResponse<AdminThemeDetailResponse>> fun findAdminThemeDetail(@PathVariable("id") id: Long): ResponseEntity<CommonApiResponse<AdminThemeDetailResponse>>
@AdminOnly(type = AdminType.HQ, privilege = Privilege.CREATE) @AdminOnly(type = AdminType.HQ, privilege = Privilege.CREATE)
@Operation(summary = "테마 추가", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "테마 추가")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun createTheme(@Valid @RequestBody themeCreateRequest: ThemeCreateRequest): ResponseEntity<CommonApiResponse<ThemeCreateResponse>> fun createTheme(@Valid @RequestBody themeCreateRequest: ThemeCreateRequest): ResponseEntity<CommonApiResponse<ThemeCreateResponse>>
@AdminOnly(type = AdminType.HQ, privilege = Privilege.DELETE) @AdminOnly(type = AdminType.HQ, privilege = Privilege.DELETE)
@Operation(summary = "테마 삭제", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "테마 삭제")
@ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "204"))
fun deleteTheme(@PathVariable id: Long): ResponseEntity<CommonApiResponse<Unit>> fun deleteTheme(@PathVariable id: Long): ResponseEntity<CommonApiResponse<Unit>>
@AdminOnly(type = AdminType.HQ, privilege = Privilege.UPDATE) @AdminOnly(type = AdminType.HQ, privilege = Privilege.UPDATE)
@Operation(summary = "테마 수정", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "테마 수정")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200"))
fun updateTheme( fun updateTheme(
@PathVariable id: Long, @PathVariable id: Long,
@Valid @RequestBody request: ThemeUpdateRequest @Valid @RequestBody request: ThemeUpdateRequest
): ResponseEntity<CommonApiResponse<Unit>> ): ResponseEntity<CommonApiResponse<Unit>>
@AdminOnly(privilege = Privilege.READ_SUMMARY) @AdminOnly(privilege = Privilege.READ_SUMMARY)
@Operation(summary = "테마 조회", description = "현재 open 상태인 모든 테마 ID + 이름 조회", tags = ["관리자 로그인이 필요한 API"]) @Operation(summary = "현재 활성화 상태인 테마 ID + 이름 목록 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun getActiveThemes(): ResponseEntity<CommonApiResponse<SimpleActiveThemeListResponse>> fun getActiveThemes(): ResponseEntity<CommonApiResponse<SimpleActiveThemeListResponse>>
} }
interface PublicThemeAPI { interface PublicThemeAPI {
@Public @Public
@Operation(summary = "입력된 모든 ID에 대한 테마 조회") @Operation(summary = "입력된 모든 ID에 대한 테마 정보 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findThemeInfosByIds(request: ThemeIdListRequest): ResponseEntity<CommonApiResponse<ThemeInfoListResponse>> fun findThemeInfosByIds(request: ThemeIdListRequest): ResponseEntity<CommonApiResponse<ThemeInfoListResponse>>
@Public
@Operation(summary = "입력된 테마 ID에 대한 정보 조회") @Operation(summary = "입력된 테마 ID에 대한 정보 조회")
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findThemeInfoById(@PathVariable id: Long): ResponseEntity<CommonApiResponse<ThemeInfoResponse>> fun findThemeInfoById(@PathVariable id: Long): ResponseEntity<CommonApiResponse<ThemeInfoResponse>>
} }

View File

@ -3,46 +3,29 @@ package roomescape.user.docs
import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.responses.ApiResponse import io.swagger.v3.oas.annotations.responses.ApiResponse
import io.swagger.v3.oas.annotations.responses.ApiResponses import io.swagger.v3.oas.annotations.responses.ApiResponses
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.validation.Valid import jakarta.validation.Valid
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestBody
import roomescape.auth.web.support.User
import roomescape.auth.web.support.Public import roomescape.auth.web.support.Public
import roomescape.auth.web.support.UserOnly import roomescape.auth.web.support.User
import roomescape.common.dto.CurrentUserContext import roomescape.common.dto.CurrentUserContext
import roomescape.common.dto.response.CommonApiResponse import roomescape.common.dto.response.CommonApiResponse
import roomescape.user.web.UserContactResponse import roomescape.user.web.UserContactResponse
import roomescape.user.web.UserCreateRequest import roomescape.user.web.UserCreateRequest
import roomescape.user.web.UserCreateResponse import roomescape.user.web.UserCreateResponse
@Tag(name = "2. 회원 API", description = "회원 정보를 관리할 때 사용합니다.")
interface UserAPI { interface UserAPI {
@Public @Public
@Operation(summary = "회원 가입") @Operation(summary = "회원 가입")
@ApiResponses( @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
ApiResponse(
responseCode = "200",
description = "성공",
useReturnTypeSchema = true
)
)
fun signup( fun signup(
@Valid @RequestBody request: UserCreateRequest @Valid @RequestBody request: UserCreateRequest
): ResponseEntity<CommonApiResponse<UserCreateResponse>> ): ResponseEntity<CommonApiResponse<UserCreateResponse>>
@UserOnly @Operation(summary = "회원 연락처 조회")
@Operation(summary = "회원 가입") @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
@ApiResponses(
ApiResponse(
responseCode = "200",
description = "성공",
useReturnTypeSchema = true
)
)
fun findContact( fun findContact(
@User user: CurrentUserContext @User user: CurrentUserContext
): ResponseEntity<CommonApiResponse<UserContactResponse>> ): ResponseEntity<CommonApiResponse<UserContactResponse>>
} }