72 lines
1.8 KiB
Kotlin
72 lines
1.8 KiB
Kotlin
package com.android.trisolarisserver.models.booking
|
|
|
|
import com.android.trisolarisserver.models.property.Property
|
|
import jakarta.persistence.*
|
|
import java.time.OffsetDateTime
|
|
import java.util.UUID
|
|
|
|
@Entity
|
|
@Table(
|
|
name = "inbound_email",
|
|
uniqueConstraints = [
|
|
UniqueConstraint(columnNames = ["message_id"]),
|
|
UniqueConstraint(columnNames = ["property_id", "ota_booking_id"])
|
|
]
|
|
)
|
|
class InboundEmail(
|
|
@Id
|
|
@GeneratedValue
|
|
@Column(columnDefinition = "uuid")
|
|
val id: UUID? = null,
|
|
|
|
@ManyToOne(fetch = FetchType.LAZY)
|
|
@JoinColumn(name = "property_id")
|
|
var property: Property? = null,
|
|
|
|
@ManyToOne(fetch = FetchType.LAZY)
|
|
@JoinColumn(name = "booking_id")
|
|
var booking: Booking? = null,
|
|
|
|
@Column(name = "ota_booking_id")
|
|
var otaBookingId: String? = null,
|
|
|
|
@Column(name = "message_id")
|
|
var messageId: String? = null,
|
|
|
|
@Column(name = "subject")
|
|
var subject: String? = null,
|
|
|
|
@Column(name = "from_address")
|
|
var fromAddress: String? = null,
|
|
|
|
@Column(name = "received_at", columnDefinition = "timestamptz")
|
|
var receivedAt: OffsetDateTime? = null,
|
|
|
|
@Column(name = "status", nullable = false)
|
|
@Enumerated(EnumType.STRING)
|
|
var status: InboundEmailStatus = InboundEmailStatus.PENDING,
|
|
|
|
@Column(name = "raw_pdf_path")
|
|
var rawPdfPath: String? = null,
|
|
|
|
@Column(name = "raw_eml_path")
|
|
var rawEmlPath: String? = null,
|
|
|
|
@Column(name = "extracted_data", columnDefinition = "jsonb")
|
|
var extractedData: String? = null,
|
|
|
|
@Column(name = "processed_at", columnDefinition = "timestamptz")
|
|
var processedAt: OffsetDateTime? = null,
|
|
|
|
@Column(name = "created_at", nullable = false, columnDefinition = "timestamptz")
|
|
val createdAt: OffsetDateTime = OffsetDateTime.now()
|
|
)
|
|
|
|
enum class InboundEmailStatus {
|
|
PENDING,
|
|
CREATED,
|
|
CANCELLED,
|
|
SKIPPED,
|
|
ERROR
|
|
}
|