Files
velocity-pay-springboot/src/main/java/zw/qantra/tm/domain/models/Transaction.java

146 lines
4.9 KiB
Java

package zw.qantra.tm.domain.models;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.SQLRestriction;
import org.springframework.data.domain.Persistable;
import zw.qantra.tm.domain.enums.*;
import java.math.BigDecimal;
import java.util.UUID;
@Entity
@Table(name = "transaction", indexes = {
@Index(name = "idx_transaction_trace_type", columnList = "trace, type"),
@Index(name = "idx_transaction_reference", columnList = "reference"),
@Index(name = "idx_transaction_workspace_id", columnList = "workspace_id"),
@Index(name = "idx_transaction_confirm_pay_integ", columnList = "confirmation_status, payment_status, integration_status"),
@Index(name = "idx_transaction_pay_poll", columnList = "payment_status, polling_status"),
@Index(name = "idx_transaction_status", columnList = "status"),
@Index(name = "idx_transaction_created_at", columnList = "created_at"),
@Index(name = "idx_transaction_debit_phone", columnList = "debit_phone"),
@Index(name = "idx_transaction_credit_phone", columnList = "credit_phone"),
@Index(name = "idx_transaction_workflow_id", columnList = "workflow_id"),
})
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@SQLRestriction("deleted = false")
public class Transaction extends BaseEntity {
@Column(name = "workspace_id")
private UUID workspaceId;
@Column(name = "user_id")
private String userId;
private String username;
private String trace;
private String region;
@Enumerated(EnumType.STRING)
private PartyType partyType;
private BigDecimal amount;
private BigDecimal charge;
private BigDecimal gatewayCharge;
private BigDecimal tax;
private BigDecimal totalAmount;
private String reference;
private String providerUid;
private String productUid;
private String paymentProcessorLabel;
private String integrationProcessorLabel;
private String confirmationProcessorLabel;
private String providerLabel;
private String rrn;
private String channelName;
private String channel;
@Column(name = "debit_phone")
private String debitPhone;
private String debitAccount;
@Enumerated(EnumType.STRING)
private CurrencyType debitCurrency;
private String debitName;
private String debitCard;
private String debitRef;
private String debitEmail;
@Column(name = "credit_phone")
private String creditPhone;
private String creditAccount;
@Enumerated(EnumType.STRING)
private CurrencyType creditCurrency;
private BigDecimal creditAmount;
private BigDecimal creditTotalAmount;
private String creditName;
private String creditCard;
private String creditRef;
private String creditEmail;
private String creditAddress;
private String creditVoucher;
private String billClientId;
private String clientSecret;
private String aggregatorId;
private String paymentProcessorRef;
private String billName;
private String billProductName;
private String paymentProcessorName;
private String providerImage;
private String paymentProcessorImage;
private UUID batchId;
private String batchDescription;
@Enumerated(EnumType.STRING)
private Status authorizationStatus;
@Enumerated(EnumType.STRING)
@Column(name = "confirmation_status")
private Status confirmationStatus;
@Enumerated(EnumType.STRING)
@Column(name = "payment_status")
private Status paymentStatus;
@Enumerated(EnumType.STRING)
@Column(name = "integration_status")
private Status integrationStatus;
@Enumerated(EnumType.STRING)
private Status reversalStatus;
@Enumerated(EnumType.STRING)
@Column(name = "polling_status")
private Status pollingStatus;
private String orderId;
private String orderTrace;
private String orderTransactionTrace;
private String orderTransactionId;
private String erpSalesRef;
private String erpJournalRef;
private String erpSalesPaymentRef;
private String erpPurchaseRef;
private String erpPurchasePaymentRef;
private String erpCommissionJournalRef;
@Column(name = "workflow_id", nullable = true)
private long workflowId;
@Enumerated(EnumType.STRING)
private RequestType type;
@Enumerated(EnumType.STRING)
private AuthType authType;
@Column(columnDefinition = "TEXT")
private String errorMessage;
@Column(columnDefinition = "TEXT")
private String systemErrorMessage;
private String responseCode;
@Enumerated(EnumType.STRING)
private Status status;
@Column(columnDefinition = "TEXT")
private String targetUrl;
private String sdkActionId;
private String verificationCode;
private Integer retries;
@Transient
private Object additionalData;
}