package com.android.trisolarisserver.models.room import com.android.trisolarisserver.models.booking.Booking import com.android.trisolarisserver.models.property.AppUser import com.android.trisolarisserver.models.property.Property import jakarta.persistence.* import java.time.OffsetDateTime import java.util.UUID @Entity @Table(name = "room_stay") class RoomStay( @Id @GeneratedValue @Column(columnDefinition = "uuid") val id: UUID? = null, @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "property_id", nullable = false) var property: Property, @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "booking_id", nullable = false) var booking: Booking, @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "room_id", nullable = false) var room: Room, @Column(name = "from_at", nullable = false, columnDefinition = "timestamptz") var fromAt: OffsetDateTime, @Column(name = "to_at", columnDefinition = "timestamptz") var toAt: OffsetDateTime? = null, // null = active @Column(name = "is_voided", nullable = false) var isVoided: Boolean = false, @Enumerated(EnumType.STRING) @Column(name = "rate_source") var rateSource: RateSource? = null, @Column(name = "nightly_rate") var nightlyRate: Long? = null, @Column(name = "rate_plan_code") var ratePlanCode: String? = null, @Column(name = "currency") var currency: String? = null, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "created_by") var createdBy: AppUser? = null, @Column(name = "created_at", nullable = false, columnDefinition = "timestamptz") val createdAt: OffsetDateTime = OffsetDateTime.now() )