From dd70fb2406129eff74c4042d7f1eb1522d28dcd0 Mon Sep 17 00:00:00 2001 From: Kristijan Mitrovic Date: Tue, 21 Apr 2020 11:53:30 +0200 Subject: [PATCH] Store archived payment info on account deletion --- .../main/java/bubble/dao/account/AccountDAO.java | 4 ++++ .../bubble/dao/bill/AccountPaymentArchivedDAO.java | 11 +++++++++++ .../bubble/model/bill/AccountPaymentArchived.java | 13 ++----------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/bubble-server/src/main/java/bubble/dao/account/AccountDAO.java b/bubble-server/src/main/java/bubble/dao/account/AccountDAO.java index d9e2098f..9ee45ba3 100644 --- a/bubble-server/src/main/java/bubble/dao/account/AccountDAO.java +++ b/bubble-server/src/main/java/bubble/dao/account/AccountDAO.java @@ -8,6 +8,7 @@ import bubble.cloud.CloudServiceDriver; import bubble.cloud.compute.ComputeNodeSizeType; import bubble.dao.account.message.AccountMessageDAO; import bubble.dao.app.*; +import bubble.dao.bill.AccountPaymentArchivedDAO; import bubble.dao.bill.BillDAO; import bubble.dao.cloud.AnsibleRoleDAO; import bubble.dao.cloud.BubbleDomainDAO; @@ -349,6 +350,9 @@ public class AccountDAO extends AbstractCRUDDAO implements SqlViewSearc // stash the deletion policy for later use, the policy object will be deleted in deleteDependencies final var deletionPolicy = policyDAO.findSingleByAccount(uuid).getDeletionPolicy(); + // archive all payment data for the account + configuration.getBean(AccountPaymentArchivedDAO.class).createForAccount(uuid); + log.info("delete: starting to delete account-dependent objects - " + currentThread().getName()); configuration.deleteDependencies(account); log.info("delete: finished deleting account-dependent objects - " + currentThread().getName()); diff --git a/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java b/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java index 2781f66d..4c5efafc 100644 --- a/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java +++ b/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java @@ -22,4 +22,15 @@ public class AccountPaymentArchivedDAO public AccountPaymentArchived findByAccountUuid(@NonNull final String accountUuid) { return findByUniqueField("accountUuid", accountUuid); } + + @NonNull public AccountPaymentArchived createForAccount(@NonNull final String accountUuid) { + final var allBills = getConfiguration().getBean(BillDAO.class).findByAccount(accountUuid); + final var allPayments = getConfiguration().getBean(AccountPaymentDAO.class).findByAccount(accountUuid); + final var allMethods = getConfiguration().getBean(AccountPaymentMethodDAO.class).findByAccount(accountUuid); + + return create(new AccountPaymentArchived().setAccountUuid(accountUuid) + .setBills(allBills) + .setPayments(allPayments) + .setPaymentMethods(allMethods)); + } } diff --git a/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java b/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java index 6a0bafa6..3bc74455 100644 --- a/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java +++ b/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java @@ -6,7 +6,7 @@ package bubble.model.bill; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; -import lombok.NonNull; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.Accessors; import org.cobbzilla.wizard.model.IdentifiableBase; @@ -25,18 +25,9 @@ import static org.cobbzilla.wizard.model.crypto.EncryptedTypes.ENCRYPTED_STRING; @ECType(root=true) @ECTypeCreate(method="DISABLED") @ECTypeURIs(listFields={"accountName", "paymentMethodMaskedInfo", "amount"}) -@Entity @Accessors(chain=true) +@Entity @Accessors(chain=true) @NoArgsConstructor public class AccountPaymentArchived extends IdentifiableBase { - public AccountPaymentArchived(@NonNull final String accountUuid, @NonNull final List bills, - @NonNull final List payments, - @NonNull final List paymentMethods) { - this.setAccountUuid(accountUuid) - .setBills(bills) - .setPayments(payments) - .setPaymentMethods(paymentMethods); - } - @ECSearchable @ECField(index=10, type=EntityFieldType.opaque_string) @ECIndex(unique=true) @Column(updatable=false, length=UUID_MAXLEN) @Getter @Setter private String accountUuid;