package com.android.trisolarisserver.models.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 = "payment") class Payment( @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, @Column(name = "amount", nullable = false) var amount: Long, @Column(name = "currency", nullable = false) var currency: String, @Enumerated(EnumType.STRING) @Column(name = "method", nullable = false) var method: PaymentMethod, @Column(name = "gateway_payment_id") var gatewayPaymentId: String? = null, @Column(name = "gateway_txn_id") var gatewayTxnId: String? = null, @Column(name = "bank_ref_num") var bankRefNum: String? = null, @Column(name = "mode") var mode: String? = null, @Column(name = "pg_type") var pgType: String? = null, @Column(name = "payer_vpa") var payerVpa: String? = null, @Column(name = "payer_name") var payerName: String? = null, @Column(name = "payment_source") var paymentSource: String? = null, @Column(name = "reference") var reference: String? = null, @Column(name = "notes") var notes: String? = null, @Column(name = "received_at", nullable = false, columnDefinition = "timestamptz") var receivedAt: OffsetDateTime = OffsetDateTime.now(), @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "received_by") var receivedBy: AppUser? = null )