package roomescape.reservation.infrastructure.persistence import com.fasterxml.jackson.annotation.JsonIgnore import jakarta.persistence.* import roomescape.member.infrastructure.persistence.MemberEntity import roomescape.theme.infrastructure.persistence.ThemeEntity import roomescape.time.infrastructure.persistence.TimeEntity import java.time.LocalDate @Entity @Table(name = "reservations") class ReservationEntity( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null, 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, @Enumerated(value = EnumType.STRING) var reservationStatus: ReservationStatus ) { @JsonIgnore fun isWaiting(): Boolean = reservationStatus == ReservationStatus.WAITING @JsonIgnore fun isSameMember(memberId: Long): Boolean { return this.member.id == memberId } } enum class ReservationStatus { CONFIRMED, CONFIRMED_PAYMENT_REQUIRED, WAITING }