diff --git a/src/main/java/zw/qantra/tm/domain/models/AdditionalData.java b/src/main/java/zw/qantra/tm/domain/models/AdditionalData.java index d383fa9..0bfa820 100644 --- a/src/main/java/zw/qantra/tm/domain/models/AdditionalData.java +++ b/src/main/java/zw/qantra/tm/domain/models/AdditionalData.java @@ -1,12 +1,7 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -17,15 +12,21 @@ import zw.qantra.tm.domain.enums.RequestType; @Getter @Setter @Entity +@Table(name = "additional_data", indexes = { + @Index(name = "idx_additional_data_txn_id", columnList = "transaction_id"), + @Index(name = "idx_additional_data_txn_type", columnList = "transaction_id, request_type"), +}) @Builder @AllArgsConstructor @NoArgsConstructor public class AdditionalData extends BaseEntity { + @Column(name = "transaction_id") private String transactionId; @Column(columnDefinition = "TEXT") private String jsonString; @Enumerated(EnumType.STRING) + @Column(name = "request_type") private RequestType requestType; } diff --git a/src/main/java/zw/qantra/tm/domain/models/Category.java b/src/main/java/zw/qantra/tm/domain/models/Category.java index 29a3406..6add210 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Category.java +++ b/src/main/java/zw/qantra/tm/domain/models/Category.java @@ -1,10 +1,13 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.SQLRestriction; @Entity +@Table(name = "category", indexes = { + @Index(name = "idx_category_name", columnList = "name"), +}) @Setter @Getter @Builder diff --git a/src/main/java/zw/qantra/tm/domain/models/Charge.java b/src/main/java/zw/qantra/tm/domain/models/Charge.java index a8af206..94300e3 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Charge.java +++ b/src/main/java/zw/qantra/tm/domain/models/Charge.java @@ -12,6 +12,10 @@ import java.util.HashSet; import java.util.Set; @Entity +@Table(name = "charge", indexes = { + @Index(name = "idx_charge_currency", columnList = "currency"), + @Index(name = "idx_charge_label_currency", columnList = "charge_label, currency"), +}) @Getter @Setter @Builder @@ -32,6 +36,7 @@ public class Charge extends BaseEntity { private BigDecimal maximumAmount; @Enumerated(EnumType.STRING) + @Column(name = "charge_label") private ChargeLabelEnum chargeLabel; @Enumerated(EnumType.STRING) private CurrencyType currency; diff --git a/src/main/java/zw/qantra/tm/domain/models/ChargeCondition.java b/src/main/java/zw/qantra/tm/domain/models/ChargeCondition.java index 637cc7b..7792d70 100644 --- a/src/main/java/zw/qantra/tm/domain/models/ChargeCondition.java +++ b/src/main/java/zw/qantra/tm/domain/models/ChargeCondition.java @@ -7,6 +7,9 @@ import zw.qantra.tm.domain.enums.ChargeConditionType; import java.util.List; @Entity +@Table(name = "charge_condition", indexes = { + @Index(name = "idx_charge_condition_codes", columnList = "codes"), +}) @Getter @Setter @Builder diff --git a/src/main/java/zw/qantra/tm/domain/models/Currency.java b/src/main/java/zw/qantra/tm/domain/models/Currency.java index 9b6bb45..d918598 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Currency.java +++ b/src/main/java/zw/qantra/tm/domain/models/Currency.java @@ -1,15 +1,19 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import lombok.*; @Entity +@Table(name = "currency", indexes = { + @Index(name = "idx_currency_iso_code", columnList = "iso_code"), +}) @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class Currency extends BaseEntity { + @Column(name = "iso_code") private String isoCode; private String name; private String displayName; diff --git a/src/main/java/zw/qantra/tm/domain/models/GroupBatch.java b/src/main/java/zw/qantra/tm/domain/models/GroupBatch.java index 6fd0293..d82c07a 100644 --- a/src/main/java/zw/qantra/tm/domain/models/GroupBatch.java +++ b/src/main/java/zw/qantra/tm/domain/models/GroupBatch.java @@ -1,10 +1,7 @@ package zw.qantra.tm.domain.models; import com.fasterxml.jackson.annotation.JsonInclude; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -18,6 +15,13 @@ import java.time.LocalDateTime; import java.util.UUID; @Entity +@Table(name = "group_batch", indexes = { + @Index(name = "idx_group_batch_user_id", columnList = "user_id"), + @Index(name = "idx_group_batch_status", columnList = "status"), + @Index(name = "idx_group_batch_recipient_group_id", columnList = "recipient_group_id"), + @Index(name = "idx_group_batch_created_at", columnList = "created_at"), + @Index(name = "idx_group_batch_payment_ref", columnList = "payment_reference"), +}) @Getter @Setter @Builder @@ -26,7 +30,9 @@ import java.util.UUID; @SQLRestriction("deleted = false") @JsonInclude(JsonInclude.Include.NON_NULL) public class GroupBatch extends BaseEntity { + @Column(name = "recipient_group_id") private UUID recipientGroupId; + @Column(name = "user_id") private String userId; private String description; private String requestedBy; @@ -35,8 +41,11 @@ public class GroupBatch extends BaseEntity { @Enumerated(EnumType.STRING) private GroupBatchStatus status; + @Column(name = "payment_reference") private String paymentReference; + @Column(name = "payment_transaction_id") private UUID paymentTransactionId; + @Column(name = "workflow_id") private Long workflowId; private String confirmIdempotencyKey; diff --git a/src/main/java/zw/qantra/tm/domain/models/GroupBatchItem.java b/src/main/java/zw/qantra/tm/domain/models/GroupBatchItem.java index 4b20fb6..f114d8f 100644 --- a/src/main/java/zw/qantra/tm/domain/models/GroupBatchItem.java +++ b/src/main/java/zw/qantra/tm/domain/models/GroupBatchItem.java @@ -15,6 +15,12 @@ import java.math.BigDecimal; import java.util.UUID; @Entity +@Table(name = "group_batch_item", indexes = { + @Index(name = "idx_gbi_batch_id", columnList = "group_batch_id"), + @Index(name = "idx_gbi_batch_confirm", columnList = "group_batch_id, confirm_status"), + @Index(name = "idx_gbi_batch_integ", columnList = "group_batch_id, integration_status"), + @Index(name = "idx_gbi_txn_id", columnList = "transaction_id"), +}) @Getter @Setter @Builder @@ -22,9 +28,13 @@ import java.util.UUID; @NoArgsConstructor @SQLRestriction("deleted = false") public class GroupBatchItem extends BaseEntity { + @Column(name = "group_batch_id") private UUID groupBatchId; + @Column(name = "recipient_id") private UUID recipientId; + @Column(name = "recipient_name") private String recipientName; + @Column(name = "recipient_phone") private String recipientPhone; private BigDecimal amount; @@ -32,9 +42,11 @@ public class GroupBatchItem extends BaseEntity { private GroupBatchItemStatus status; @Enumerated(EnumType.STRING) + @Column(name = "confirm_status") private GroupBatchItemConfirmStatus confirmStatus; @Enumerated(EnumType.STRING) + @Column(name = "integration_status") private GroupBatchItemIntegrationStatus integrationStatus; @Column(columnDefinition = "TEXT") diff --git a/src/main/java/zw/qantra/tm/domain/models/Otp.java b/src/main/java/zw/qantra/tm/domain/models/Otp.java index a721054..425cb09 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Otp.java +++ b/src/main/java/zw/qantra/tm/domain/models/Otp.java @@ -1,13 +1,14 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; +import jakarta.persistence.*; import lombok.*; import zw.qantra.tm.domain.enums.Status; @Entity +@Table(name = "otp", indexes = { + @Index(name = "idx_otp_username_type", columnList = "username, otp_type"), +}) @Getter @Setter @Builder @@ -17,6 +18,8 @@ public class Otp extends BaseEntity{ private String username; private String otp; @Enumerated(EnumType.STRING) + @Column(name = "otp_status") private Status otpStatus; + @Column(name = "otp_type") private String otpType; } diff --git a/src/main/java/zw/qantra/tm/domain/models/PaymentProcessor.java b/src/main/java/zw/qantra/tm/domain/models/PaymentProcessor.java index 7be8e6b..6cda3c9 100644 --- a/src/main/java/zw/qantra/tm/domain/models/PaymentProcessor.java +++ b/src/main/java/zw/qantra/tm/domain/models/PaymentProcessor.java @@ -1,11 +1,13 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.SQLRestriction; @Entity +@Table(name = "payment_processor", indexes = { + @Index(name = "idx_payment_processor_label", columnList = "label"), +}) @Getter @Setter @Builder diff --git a/src/main/java/zw/qantra/tm/domain/models/Provider.java b/src/main/java/zw/qantra/tm/domain/models/Provider.java index 6f938b2..88ed560 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Provider.java +++ b/src/main/java/zw/qantra/tm/domain/models/Provider.java @@ -1,15 +1,16 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.SQLRestriction; import zw.qantra.tm.domain.enums.CurrencyType; @Entity +@Table(name = "provider", indexes = { + @Index(name = "idx_provider_category", columnList = "category"), + @Index(name = "idx_provider_client_id", columnList = "client_id"), +}) @Getter @Setter @Builder @@ -17,6 +18,7 @@ import zw.qantra.tm.domain.enums.CurrencyType; @NoArgsConstructor @SQLRestriction("deleted = false") public class Provider extends BaseEntity { + @Column(name = "client_id") private String clientId; private String label; private String name; diff --git a/src/main/java/zw/qantra/tm/domain/models/Recipient.java b/src/main/java/zw/qantra/tm/domain/models/Recipient.java index 936be5e..841a480 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Recipient.java +++ b/src/main/java/zw/qantra/tm/domain/models/Recipient.java @@ -2,12 +2,18 @@ package zw.qantra.tm.domain.models; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; import org.hibernate.annotations.SQLRestriction; @Entity +@Table(name = "recipient", indexes = { + @Index(name = "idx_recipient_account_user", columnList = "account, user_id"), + @Index(name = "idx_recipient_user_id", columnList = "user_id"), + @Index(name = "idx_recipient_phone", columnList = "phone_number"), + @Index(name = "idx_recipient_email", columnList = "email"), +}) @Getter @Setter @Builder @@ -18,10 +24,13 @@ import org.hibernate.annotations.SQLRestriction; public class Recipient extends BaseEntity { private String name; private String email; + @Column(name = "phone_number") private String phoneNumber; private String address; private String account; private String initials; + @Column(name = "latest_provider_label") private String latestProviderLabel; + @Column(name = "user_id") private String userId; } diff --git a/src/main/java/zw/qantra/tm/domain/models/RecipientGroup.java b/src/main/java/zw/qantra/tm/domain/models/RecipientGroup.java index 2316966..6ea7f4e 100644 --- a/src/main/java/zw/qantra/tm/domain/models/RecipientGroup.java +++ b/src/main/java/zw/qantra/tm/domain/models/RecipientGroup.java @@ -1,7 +1,7 @@ package zw.qantra.tm.domain.models; import com.fasterxml.jackson.annotation.JsonInclude; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -10,6 +10,9 @@ import lombok.Setter; import org.hibernate.annotations.SQLRestriction; @Entity +@Table(name = "recipient_group", indexes = { + @Index(name = "idx_recipient_group_user_id", columnList = "user_id"), +}) @Getter @Setter @Builder @@ -20,6 +23,7 @@ import org.hibernate.annotations.SQLRestriction; public class RecipientGroup extends BaseEntity { private String name; private String description; + @Column(name = "user_id") private String userId; } diff --git a/src/main/java/zw/qantra/tm/domain/models/RecipientGroupMember.java b/src/main/java/zw/qantra/tm/domain/models/RecipientGroupMember.java index 40ca5a1..35cc8bc 100644 --- a/src/main/java/zw/qantra/tm/domain/models/RecipientGroupMember.java +++ b/src/main/java/zw/qantra/tm/domain/models/RecipientGroupMember.java @@ -1,9 +1,7 @@ package zw.qantra.tm.domain.models; import com.fasterxml.jackson.annotation.JsonInclude; -import jakarta.persistence.Entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -14,6 +12,10 @@ import org.hibernate.annotations.SQLRestriction; import java.util.UUID; @Entity +@Table(name = "recipient_group_member", indexes = { + @Index(name = "idx_rgm_group_id", columnList = "recipient_group_id"), + @Index(name = "idx_rgm_group_recipient", columnList = "recipient_group_id, recipient_id"), +}) @Getter @Setter @Builder @@ -22,12 +24,15 @@ import java.util.UUID; @JsonInclude(JsonInclude.Include.NON_NULL) @SQLRestriction("deleted = false") public class RecipientGroupMember extends BaseEntity { + @Column(name = "recipient_group_id") private UUID recipientGroupId; @ManyToOne @JoinColumn(name = "recipient_id") private Recipient recipient; + @Column(name = "recipient_uid") private UUID recipientUid; private String account; + @Column(name = "user_id") private String userId; } diff --git a/src/main/java/zw/qantra/tm/domain/models/Setting.java b/src/main/java/zw/qantra/tm/domain/models/Setting.java index 28fbf1d..49ff0a4 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Setting.java +++ b/src/main/java/zw/qantra/tm/domain/models/Setting.java @@ -1,6 +1,6 @@ package zw.qantra.tm.domain.models; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -8,12 +8,17 @@ import lombok.NoArgsConstructor; import lombok.Setter; @Entity +@Table(name = "setting", indexes = { + @Index(name = "idx_setting_name", columnList = "setting_name"), +}) @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class Setting extends BaseEntity { + @Column(name = "setting_name") private String settingName; + @Column(name = "setting_value") private String settingValue; } \ No newline at end of file diff --git a/src/main/java/zw/qantra/tm/domain/models/Transaction.java b/src/main/java/zw/qantra/tm/domain/models/Transaction.java index 18e1aa0..bf43a90 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Transaction.java +++ b/src/main/java/zw/qantra/tm/domain/models/Transaction.java @@ -12,6 +12,18 @@ 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_user_id", columnList = "user_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 @@ -19,7 +31,9 @@ import java.util.UUID; @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) +@SQLRestriction("deleted = false") public class Transaction extends BaseEntity { + @Column(name = "user_id") private String userId; private String trace; private String region; @@ -39,6 +53,7 @@ public class Transaction extends BaseEntity { private String rrn; private String channelName; private String channel; + @Column(name = "debit_phone") private String debitPhone; private String debitAccount; @Enumerated(EnumType.STRING) @@ -47,6 +62,7 @@ public class Transaction extends BaseEntity { private String debitCard; private String debitRef; private String debitEmail; + @Column(name = "credit_phone") private String creditPhone; private String creditAccount; @Enumerated(EnumType.STRING) @@ -69,14 +85,18 @@ public class Transaction extends BaseEntity { @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; @@ -92,7 +112,7 @@ public class Transaction extends BaseEntity { private String erpPurchasePaymentRef; private String erpCommissionJournalRef; - @Column(nullable = true) + @Column(name = "workflow_id", nullable = true) private long workflowId; @Enumerated(EnumType.STRING) diff --git a/src/main/java/zw/qantra/tm/domain/models/TransactionEvent.java b/src/main/java/zw/qantra/tm/domain/models/TransactionEvent.java index 091a3d8..f9a54e6 100644 --- a/src/main/java/zw/qantra/tm/domain/models/TransactionEvent.java +++ b/src/main/java/zw/qantra/tm/domain/models/TransactionEvent.java @@ -2,10 +2,7 @@ package zw.qantra.tm.domain.models; import com.fasterxml.jackson.annotation.JsonInclude; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Enumerated; -import jakarta.persistence.EnumType; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -14,6 +11,9 @@ import lombok.Setter; import zw.qantra.tm.domain.enums.Status; @Entity +@Table(name = "transaction_event", indexes = { + @Index(name = "idx_txn_event_txn_id", columnList = "transaction_id"), +}) @Getter @Setter @Builder @@ -21,6 +21,7 @@ import zw.qantra.tm.domain.enums.Status; @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) public class TransactionEvent extends BaseEntity { + @Column(name = "transaction_id") private String transactionId; private String event; @Enumerated(EnumType.STRING) diff --git a/src/main/java/zw/qantra/tm/domain/models/User.java b/src/main/java/zw/qantra/tm/domain/models/User.java index 62d8313..d9a673f 100644 --- a/src/main/java/zw/qantra/tm/domain/models/User.java +++ b/src/main/java/zw/qantra/tm/domain/models/User.java @@ -12,7 +12,9 @@ import java.util.Collection; import java.util.List; @Entity -@Table(name = "users") +@Table(name = "users", indexes = { + @Index(name = "idx_user_phone", columnList = "phone"), +}) @Data @EqualsAndHashCode(callSuper = true) @SQLRestriction("deleted = false") diff --git a/src/main/resources/application-lab.properties b/src/main/resources/application-lab.properties index af57397..8f328b7 100644 --- a/src/main/resources/application-lab.properties +++ b/src/main/resources/application-lab.properties @@ -40,8 +40,8 @@ ecocash.url=https://developers.ecocash.co.zw/api/ecocash_pay/api/v2/payment/inst #velocity.api.base-url=https://api.velocityafrica.net #velocity.api.api-key=z5WdSlItIhYL6nd7rxzf-jFdKN3jJyL1LubhDFBvXmc -velocity.api.base-url=http://localhost:6975 -velocity.api.api-key=gH13nirZdUQdqC9impgzTzqEqv-jdbLOTx_HD5fQr_A +#velocity.api.base-url=http://localhost:6975 +#velocity.api.api-key=gH13nirZdUQdqC9impgzTzqEqv-jdbLOTx_HD5fQr_A velocity.api.cancel-url=http://localhost:9005/poll velocity.api.success-url=http://localhost:9005/poll diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c245e23..5dd5c88 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -67,7 +67,7 @@ hot.password=Stikbanch@50 hot.cache.duration.minutes=5 velocity.api.base-url=https://api.velocityafrica.net -velocity.api.api-key=cHE08ADmiATtf8VYgA59-wKVKVKj2WusKDAaaRLDsG8 +velocity.api.api-key=hL5KvXqRAYWH_I8anEZsbiL-tFoM2y25g5tkYuLuw3s velocity.api.cancel-url=https://pay.velocityafrica.net/poll velocity.api.success-url=https://pay.velocityafrica.net/poll diff --git a/src/main/resources/liquibase-diff-changeLog.xml b/src/main/resources/liquibase-diff-changeLog.xml new file mode 100644 index 0000000..00baab4 --- /dev/null +++ b/src/main/resources/liquibase-diff-changeLog.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +