generated from pricelees/issue-pr-template
[#41] 예약 스키마 재정의 #42
@ -1,68 +1,36 @@
|
||||
package roomescape.reservation.infrastructure.persistence
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore
|
||||
import jakarta.persistence.*
|
||||
import roomescape.common.entity.BaseEntity
|
||||
import roomescape.member.infrastructure.persistence.MemberEntity
|
||||
import roomescape.theme.infrastructure.persistence.ThemeEntity
|
||||
import roomescape.time.infrastructure.persistence.TimeEntity
|
||||
import java.time.LocalDate
|
||||
import jakarta.persistence.Entity
|
||||
import jakarta.persistence.EnumType
|
||||
import jakarta.persistence.Enumerated
|
||||
import jakarta.persistence.Table
|
||||
import roomescape.common.entity.AuditingBaseEntity
|
||||
|
||||
@Entity
|
||||
@Table(name = "reservations")
|
||||
@Table(name = "reservation")
|
||||
class ReservationEntity(
|
||||
@Id
|
||||
@Column(name = "reservation_id")
|
||||
private var _id: Long?,
|
||||
id: Long,
|
||||
|
||||
@Column(name = "date", nullable = false)
|
||||
var date: LocalDate,
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "time_id", nullable = false)
|
||||
var time: TimeEntity,
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "theme_id", nullable = false)
|
||||
var theme: ThemeEntity,
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "member_id", nullable = false)
|
||||
var member: MemberEntity,
|
||||
val memberId: Long,
|
||||
val scheduleId: Long,
|
||||
val reserverName: String,
|
||||
val reserverContact: String,
|
||||
val participantCount: Short,
|
||||
val requirement: String,
|
||||
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
@Column(name = "status", nullable = false, length = 30)
|
||||
var status: ReservationStatus,
|
||||
): BaseEntity() {
|
||||
override fun getId(): Long? = _id
|
||||
|
||||
@JsonIgnore
|
||||
fun isWaiting(): Boolean = status == ReservationStatus.WAITING
|
||||
|
||||
@JsonIgnore
|
||||
fun isReservedBy(memberId: Long): Boolean {
|
||||
return this.member.id == memberId
|
||||
}
|
||||
|
||||
fun cancelByUser() {
|
||||
this.status = ReservationStatus.CANCELED_BY_USER
|
||||
}
|
||||
|
||||
) : AuditingBaseEntity(id) {
|
||||
fun confirm() {
|
||||
this.status = ReservationStatus.CONFIRMED
|
||||
}
|
||||
|
||||
fun cancel() {
|
||||
this.status = ReservationStatus.CANCELED
|
||||
}
|
||||
}
|
||||
|
||||
enum class ReservationStatus {
|
||||
CONFIRMED,
|
||||
CONFIRMED_PAYMENT_REQUIRED,
|
||||
PENDING,
|
||||
WAITING,
|
||||
CANCELED_BY_USER,
|
||||
AUTOMATICALLY_CANCELED,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun confirmedStatus(): Array<ReservationStatus> = arrayOf(CONFIRMED, CONFIRMED_PAYMENT_REQUIRED)
|
||||
}
|
||||
PENDING, CONFIRMED, CANCELED, FAILED, EXPIRED
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user