generated from pricelees/issue-pr-template
[#56] 예약 & 결제 프로세스 및 패키지 구조 재정의 #57
@ -6,7 +6,7 @@ import com.sangdol.roomescape.reservation.exception.ReservationErrorCode
|
||||
import com.sangdol.roomescape.reservation.exception.ReservationException
|
||||
import com.sangdol.roomescape.reservation.web.PendingReservationCreateRequest
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleSummaryResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleSummaryResponse
|
||||
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
|
||||
import io.github.oshai.kotlinlogging.KLogger
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
|
||||
@ -7,13 +7,23 @@ import com.sangdol.roomescape.admin.business.AdminService
|
||||
import com.sangdol.roomescape.common.types.AuditingInfo
|
||||
import com.sangdol.roomescape.common.types.Auditor
|
||||
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
|
||||
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryListResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleOverviewResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleSummaryResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeListResponse
|
||||
import com.sangdol.roomescape.schedule.mapper.toAdminSummaryListResponse
|
||||
import com.sangdol.roomescape.schedule.mapper.toOverviewResponse
|
||||
import com.sangdol.roomescape.schedule.mapper.toResponse
|
||||
import com.sangdol.roomescape.schedule.mapper.toSummaryResponse
|
||||
import com.sangdol.roomescape.schedule.exception.ScheduleErrorCode
|
||||
import com.sangdol.roomescape.schedule.exception.ScheduleException
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntityFactory
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.*
|
||||
import io.github.oshai.kotlinlogging.KLogger
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
|
||||
@ -6,8 +6,8 @@ import com.sangdol.roomescape.schedule.exception.ScheduleException
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import io.github.oshai.kotlinlogging.KLogger
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@ -7,7 +7,11 @@ import com.sangdol.roomescape.auth.web.support.AdminOnly
|
||||
import com.sangdol.roomescape.auth.web.support.Public
|
||||
import com.sangdol.roomescape.auth.web.support.UserOnly
|
||||
import com.sangdol.roomescape.common.types.AuditingInfo
|
||||
import com.sangdol.roomescape.schedule.web.*
|
||||
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryListResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeListResponse
|
||||
import io.swagger.v3.oas.annotations.Operation
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
package com.sangdol.roomescape.schedule.dto
|
||||
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import java.time.LocalTime
|
||||
|
||||
data class AdminScheduleSummaryResponse(
|
||||
val id: Long,
|
||||
val themeName: String,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val status: ScheduleStatus,
|
||||
)
|
||||
|
||||
data class AdminScheduleSummaryListResponse(
|
||||
val schedules: List<AdminScheduleSummaryResponse>
|
||||
)
|
||||
@ -0,0 +1,24 @@
|
||||
package com.sangdol.roomescape.schedule.dto
|
||||
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalTime
|
||||
|
||||
data class ScheduleCreateRequest(
|
||||
val date: LocalDate,
|
||||
val time: LocalTime,
|
||||
val themeId: Long
|
||||
)
|
||||
|
||||
data class ScheduleCreateResponse(
|
||||
val id: Long
|
||||
)
|
||||
|
||||
data class ScheduleUpdateRequest(
|
||||
val time: LocalTime? = null,
|
||||
val status: ScheduleStatus? = null
|
||||
) {
|
||||
fun isAllParamsNull(): Boolean {
|
||||
return time == null && status == null
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package com.sangdol.roomescape.schedule.dto
|
||||
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.theme.infrastructure.persistence.Difficulty
|
||||
import java.time.Instant
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalTime
|
||||
|
||||
data class ScheduleWithThemeResponse(
|
||||
val id: Long,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val themeId: Long,
|
||||
val themeName: String,
|
||||
val themeDifficulty: Difficulty,
|
||||
val status: ScheduleStatus
|
||||
)
|
||||
|
||||
data class ScheduleWithThemeListResponse(
|
||||
val schedules: List<ScheduleWithThemeResponse>
|
||||
)
|
||||
|
||||
data class ScheduleSummaryResponse(
|
||||
val date: LocalDate,
|
||||
val time: LocalTime,
|
||||
val themeId: Long,
|
||||
val status: ScheduleStatus,
|
||||
val holdExpiredAt: Instant? = null
|
||||
)
|
||||
|
||||
data class ScheduleOverviewResponse(
|
||||
val id: Long,
|
||||
val storeId: Long,
|
||||
val storeName: String,
|
||||
val date: LocalDate,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val themeId: Long,
|
||||
val themeName: String,
|
||||
)
|
||||
@ -0,0 +1,12 @@
|
||||
package com.sangdol.roomescape.schedule.mapper
|
||||
|
||||
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
|
||||
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryResponse
|
||||
|
||||
fun ScheduleOverview.toAdminSummaryResponse() = AdminScheduleSummaryResponse(
|
||||
id = this.id,
|
||||
themeName = this.themeName,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
status = this.status
|
||||
)
|
||||
@ -0,0 +1,42 @@
|
||||
package com.sangdol.roomescape.schedule.mapper
|
||||
|
||||
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
|
||||
import com.sangdol.roomescape.schedule.dto.*
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
|
||||
fun ScheduleOverview.toOverviewResponse() = ScheduleOverviewResponse(
|
||||
id = this.id,
|
||||
storeId = this.storeId,
|
||||
storeName = this.storeName,
|
||||
date = this.date,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
themeId = this.themeId,
|
||||
themeName = this.themeName,
|
||||
)
|
||||
|
||||
fun ScheduleEntity.toSummaryResponse() = ScheduleSummaryResponse(
|
||||
date = this.date,
|
||||
time = this.time,
|
||||
themeId = this.themeId,
|
||||
status = this.status,
|
||||
holdExpiredAt = this.holdExpiredAt
|
||||
)
|
||||
|
||||
fun ScheduleOverview.toResponse() = ScheduleWithThemeResponse(
|
||||
id = this.id,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
themeId = this.themeId,
|
||||
themeName = this.themeName,
|
||||
themeDifficulty = this.themeDifficulty,
|
||||
status = this.status
|
||||
)
|
||||
|
||||
fun List<ScheduleOverview>.toAdminSummaryListResponse() = AdminScheduleSummaryListResponse(
|
||||
this.map { it.toAdminSummaryResponse() }
|
||||
)
|
||||
|
||||
fun List<ScheduleOverview>.toResponse() = ScheduleWithThemeListResponse(
|
||||
this.map { it.toResponse() }
|
||||
)
|
||||
@ -4,6 +4,10 @@ import com.sangdol.common.types.web.CommonApiResponse
|
||||
import com.sangdol.roomescape.common.types.AuditingInfo
|
||||
import com.sangdol.roomescape.schedule.business.ScheduleService
|
||||
import com.sangdol.roomescape.schedule.docs.AdminScheduleAPI
|
||||
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryListResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import jakarta.validation.Valid
|
||||
import org.springframework.format.annotation.DateTimeFormat
|
||||
import org.springframework.http.ResponseEntity
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
package com.sangdol.roomescape.schedule.web
|
||||
|
||||
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalTime
|
||||
|
||||
// ========================================
|
||||
// All-Admin DTO (본사 + 매장)
|
||||
// ========================================
|
||||
data class AdminScheduleSummaryResponse(
|
||||
val id: Long,
|
||||
val themeName: String,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val status: ScheduleStatus,
|
||||
)
|
||||
|
||||
fun ScheduleOverview.toAdminSummaryResponse() = AdminScheduleSummaryResponse(
|
||||
id = this.id,
|
||||
themeName = this.themeName,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
status = this.status
|
||||
)
|
||||
|
||||
data class AdminScheduleSummaryListResponse(
|
||||
val schedules: List<AdminScheduleSummaryResponse>
|
||||
)
|
||||
|
||||
fun List<ScheduleOverview>.toAdminSummaryListResponse() = AdminScheduleSummaryListResponse(
|
||||
this.map { it.toAdminSummaryResponse() }
|
||||
)
|
||||
|
||||
// ========================================
|
||||
// Store Admin DTO (매장)
|
||||
// ========================================
|
||||
data class ScheduleCreateRequest(
|
||||
val date: LocalDate,
|
||||
val time: LocalTime,
|
||||
val themeId: Long
|
||||
)
|
||||
|
||||
data class ScheduleCreateResponse(
|
||||
val id: Long
|
||||
)
|
||||
|
||||
data class ScheduleUpdateRequest(
|
||||
val time: LocalTime? = null,
|
||||
val status: ScheduleStatus? = null
|
||||
) {
|
||||
fun isAllParamsNull(): Boolean {
|
||||
return time == null && status == null
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import com.sangdol.common.types.web.CommonApiResponse
|
||||
import com.sangdol.roomescape.schedule.business.ScheduleService
|
||||
import com.sangdol.roomescape.schedule.docs.PublicScheduleAPI
|
||||
import com.sangdol.roomescape.schedule.docs.UserScheduleAPI
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeListResponse
|
||||
import org.springframework.format.annotation.DateTimeFormat
|
||||
import org.springframework.http.ResponseEntity
|
||||
import org.springframework.web.bind.annotation.*
|
||||
|
||||
@ -1,81 +0,0 @@
|
||||
package com.sangdol.roomescape.schedule.web
|
||||
|
||||
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.theme.infrastructure.persistence.Difficulty
|
||||
import java.time.Instant
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalTime
|
||||
|
||||
// ========================================
|
||||
// Public (인증 불필요)
|
||||
// ========================================
|
||||
data class ScheduleWithThemeResponse(
|
||||
val id: Long,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val themeId: Long,
|
||||
val themeName: String,
|
||||
val themeDifficulty: Difficulty,
|
||||
val status: ScheduleStatus
|
||||
)
|
||||
|
||||
fun ScheduleOverview.toResponse() = ScheduleWithThemeResponse(
|
||||
id = this.id,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
themeId = this.themeId,
|
||||
themeName = this.themeName,
|
||||
themeDifficulty = this.themeDifficulty,
|
||||
status = this.status
|
||||
)
|
||||
|
||||
data class ScheduleWithThemeListResponse(
|
||||
val schedules: List<ScheduleWithThemeResponse>
|
||||
)
|
||||
|
||||
fun List<ScheduleOverview>.toResponse() = ScheduleWithThemeListResponse(
|
||||
this.map { it.toResponse() }
|
||||
)
|
||||
|
||||
// ========================================
|
||||
// Other-Service (API 없이 다른 서비스에서 호출)
|
||||
// ========================================
|
||||
data class ScheduleSummaryResponse(
|
||||
val date: LocalDate,
|
||||
val time: LocalTime,
|
||||
val themeId: Long,
|
||||
val status: ScheduleStatus,
|
||||
val holdExpiredAt: Instant? = null
|
||||
)
|
||||
|
||||
fun ScheduleEntity.toSummaryResponse() = ScheduleSummaryResponse(
|
||||
date = this.date,
|
||||
time = this.time,
|
||||
themeId = this.themeId,
|
||||
status = this.status,
|
||||
holdExpiredAt = this.holdExpiredAt
|
||||
)
|
||||
|
||||
data class ScheduleOverviewResponse(
|
||||
val id: Long,
|
||||
val storeId: Long,
|
||||
val storeName: String,
|
||||
val date: LocalDate,
|
||||
val startFrom: LocalTime,
|
||||
val endAt: LocalTime,
|
||||
val themeId: Long,
|
||||
val themeName: String,
|
||||
)
|
||||
|
||||
fun ScheduleOverview.toOverviewResponse() = ScheduleOverviewResponse(
|
||||
id = this.id,
|
||||
storeId = this.storeId,
|
||||
storeName = this.storeName,
|
||||
date = this.date,
|
||||
startFrom = this.time,
|
||||
endAt = this.getEndAt(),
|
||||
themeId = this.themeId,
|
||||
themeName = this.themeName,
|
||||
)
|
||||
@ -12,8 +12,8 @@ import com.sangdol.roomescape.schedule.exception.ScheduleErrorCode
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.AdminScheduleSummaryResponse
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryResponse
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity
|
||||
import com.sangdol.roomescape.supports.*
|
||||
import io.kotest.assertions.assertSoftly
|
||||
|
||||
@ -4,8 +4,8 @@ import com.sangdol.common.utils.MdcPrincipalIdUtil
|
||||
import com.sangdol.roomescape.schedule.business.ScheduleService
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
|
||||
import com.sangdol.roomescape.supports.FunSpecSpringbootTest
|
||||
import com.sangdol.roomescape.supports.IDGenerator
|
||||
import com.sangdol.roomescape.supports.initialize
|
||||
|
||||
@ -20,7 +20,7 @@ import com.sangdol.roomescape.reservation.web.toEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreRepository
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus
|
||||
|
||||
@ -13,7 +13,7 @@ import com.sangdol.roomescape.payment.web.PaymentConfirmRequest
|
||||
import com.sangdol.roomescape.reservation.web.PendingReservationCreateRequest
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
|
||||
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntityFactory
|
||||
import com.sangdol.roomescape.schedule.web.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity
|
||||
import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus
|
||||
import com.sangdol.roomescape.store.dto.StoreRegisterRequest
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user