From 05bdd4d5751f14ba9bada0f464a04af4e6b6afd8 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 5 Aug 2020 21:42:30 +0200 Subject: [PATCH] #535 - fix null value for new field "isExpenditure" for existing transactions in database once on start --- .../IntroduceIsExpenditureMember.java | 67 +++++++++++++++++++ .../eventlistener/UpdateInstalledVersion.java | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/IntroduceIsExpenditureMember.java diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/IntroduceIsExpenditureMember.java b/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/IntroduceIsExpenditureMember.java new file mode 100644 index 000000000..bd0c0f8b1 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/IntroduceIsExpenditureMember.java @@ -0,0 +1,67 @@ +package de.deadlocker8.budgetmaster.utils.eventlistener; + +import de.deadlocker8.budgetmaster.settings.SettingsService; +import de.deadlocker8.budgetmaster.transactions.Transaction; +import de.deadlocker8.budgetmaster.transactions.TransactionRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.text.MessageFormat; +import java.util.List; + +@Component +public class IntroduceIsExpenditureMember +{ + private static final Logger LOGGER = LoggerFactory.getLogger(IntroduceIsExpenditureMember.class); + + private static final int ACTIVATION_VERSION_CODE = 27; + + private final TransactionRepository transactionRepository; + private final SettingsService settingsService; + + @Autowired + public IntroduceIsExpenditureMember(TransactionRepository transactionRepository, SettingsService settingsService) + { + this.transactionRepository = transactionRepository; + this.settingsService = settingsService; + } + + @EventListener + @Transactional + @Order(2) + public void onApplicationEvent(ApplicationStartedEvent event) + { + if(settingsService.getSettings().getInstalledVersionCode() <= ACTIVATION_VERSION_CODE) + { + fixMissingMemberIsExpenditure(); + } + } + + private void fixMissingMemberIsExpenditure() + { + final List<Transaction> transactions = transactionRepository.findAll(); + long fixedTransactionsCount = 0; + + for(Transaction transaction : transactions) + { + if(transaction.isExpenditure() != null) + { + continue; + } + + transaction.setExpenditure(transaction.getAmount() <= 0); + fixedTransactionsCount++; + } + + if(fixedTransactionsCount > 0) + { + LOGGER.debug(MessageFormat.format("Fixed {0} transactions (Introduced new member 'isExpenditure')", fixedTransactionsCount)); + } + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/UpdateInstalledVersion.java b/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/UpdateInstalledVersion.java index 9fc9065b8..eeca9389e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/UpdateInstalledVersion.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/eventlistener/UpdateInstalledVersion.java @@ -28,7 +28,7 @@ public class UpdateInstalledVersion @EventListener @Transactional - @Order(2) + @Order(3) public void onApplicationEvent(ApplicationStartedEvent event) { final Build build = Build.getInstance(); -- GitLab