From ef1147e557a4be29d601a755b3f45fc17ab01d07 Mon Sep 17 00:00:00 2001 From: Kristijan Mitrovic Date: Mon, 13 Apr 2020 16:16:31 +0200 Subject: [PATCH] Add account UUID into archived payment object --- .../bubble/dao/bill/AccountPaymentArchivedDAO.java | 13 ++++++++----- .../bubble/model/bill/AccountPaymentArchived.java | 11 +++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) 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 43eb0052..c2522495 100644 --- a/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java +++ b/bubble-server/src/main/java/bubble/dao/bill/AccountPaymentArchivedDAO.java @@ -21,17 +21,20 @@ public class AccountPaymentArchivedDAO // newest first @Override public Order getDefaultSortOrder() { return ORDER_CTIME_DESC; } - @NonNull public List findByAccountName(@NonNull final String accountName) { - return findByField("accountName", accountName); + @NonNull public List findByAccountNameAndUuid(@NonNull final String accountName, + @NonNull final String accountUuid) { + return findByFields("accountUuid", accountUuid, "accountName", accountName); } /** * Anonymize this object. This is needed when client requires and signs/waives his/her right to sue in the future. */ - public void anonymizeForAccountName(@NonNull final String accountName) { + public void anonymizeForAccountNameAndUuid(@NonNull final String accountName, @NonNull final String accountUuid) { // TODO: what about paymentMethodMaskedInfo, bubblePlanName and billPeriodStart. Do those fields contain any // user info and names set up by the user? - bulkUpdate(new String[] { "accountName", "accountPlanName" }, new String[] { "anonymous", "anonymized" }, - new String[] { "accountName" }, new String[] { accountName }); + bulkUpdate(new String[] { "accountUuid", "accountName", "accountPlanName" }, + new String[] { "anonymized", "anonymous", "anonymized" }, + new String[] { "accountUuid", "accountName" }, + new String[] { accountUuid, accountName }); } } 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 34937418..671c824f 100644 --- a/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java +++ b/bubble-server/src/main/java/bubble/model/bill/AccountPaymentArchived.java @@ -41,6 +41,7 @@ public class AccountPaymentArchived extends IdentifiableBase { public AccountPaymentArchived(@NonNull final AccountPayment original, @NonNull final String accountName, @NonNull final String paymentMethodMaskedInfo, @NonNull final String bubblePlanName, @NonNull final String accountPlanName, @NonNull final String billPeriodStart) { + this.accountUuid = original.getAccount(); this.accountName = accountName; this.paymentMethodMaskedInfo = paymentMethodMaskedInfo; this.bubblePlanName = bubblePlanName; @@ -54,6 +55,16 @@ public class AccountPaymentArchived extends IdentifiableBase { @Id @Column(unique=true, updatable=false, nullable=false, length=UUID_MAXLEN) @Getter @Setter private volatile String uuid; + /** + * Storing deleted account UUID here is required as user may select full deletion of his/her account while not + * waiving his/her rights to sue. So then these records must stay related to exactly that user which might not be + * unique by its name in the future. + */ + @ECSearchable @ECField(index=5) + @Type(type=ENCRYPTED_STRING) + @Column(updatable=false, columnDefinition="varchar(" + (UUID_MAXLEN + ENC_PAD) + ") NOT NULL") + @Getter @Setter private String accountUuid; + @ECSearchable @ECField(index=10) @Type(type=ENCRYPTED_STRING) @Column(updatable=false, columnDefinition="varchar(" + (Account.NAME_MAX_LENGTH + ENC_PAD) + ") NOT NULL")