From 01654a324c1b5684b0c84544d4426e453e123911 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Fri, 22 Jul 2022 23:27:48 +0200 Subject: [PATCH] #677 - move keyword check to own controller + pass transaction name --- .../transactions/TransactionController.java | 9 ---- .../TransactionNameKeywordController.java | 52 +++++++++++++++++++ .../TransactionNameKeywordService.java | 2 +- .../budgetmaster/utils/Mappings.java | 1 + .../main/resources/static/js/transactions.js | 7 +-- .../templates/transactions/empty.ftl | 0 .../transactions/newTransactionMacros.ftl | 2 +- .../transactionNameKeywordWarningModal.ftl | 2 +- 8 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java create mode 100644 BudgetMasterServer/src/main/resources/templates/transactions/empty.ftl diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index a7c3dff3c..1465be91e 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -411,13 +411,4 @@ public class TransactionController extends BaseController } return ReturnValues.NEW_TRANSACTION; } - - @GetMapping("/keywordCheck") - public String keywordWarningModal(Model model) - { - // TODO implement real check - // TODO only return keyword for transaction name not template - model.addAttribute(ModelAttributes.KEYWORD, "income"); - return ReturnValues.KEYWORD_WARNING; - } } \ No newline at end of file diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java new file mode 100644 index 000000000..957744774 --- /dev/null +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java @@ -0,0 +1,52 @@ +package de.deadlocker8.budgetmaster.transactions.keywords; + +import de.deadlocker8.budgetmaster.controller.BaseController; +import de.deadlocker8.budgetmaster.utils.Mappings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@Controller +@RequestMapping(Mappings.KEYWORDS) +public class TransactionNameKeywordController extends BaseController +{ + private static class ModelAttributes + { + public static final String KEYWORD = "transactionNameKeyword"; + } + + private static class ReturnValues + { + public static final String KEYWORD_WARNING = "transactions/transactionNameKeywordWarningModal"; + public static final String EMPTY = "transactions/empty"; + } + + private final TransactionNameKeywordService transactionNameKeywordService; + + @Autowired + public TransactionNameKeywordController(TransactionNameKeywordService transactionNameKeywordService) + { + this.transactionNameKeywordService = transactionNameKeywordService; + } + + @GetMapping("/keywordCheck") + public String keywordCheck(HttpServletResponse response, Model model, @RequestParam(value = "transactionName", required = false) String transactionName) + { + final List<String> matchingKeywords = transactionNameKeywordService.getMatchingKeywords(transactionName); + + if(matchingKeywords.isEmpty()) + { + response.setStatus(204); + return null; + } + else + { + model.addAttribute(ModelAttributes.KEYWORD, matchingKeywords.get(0)); + return ReturnValues.KEYWORD_WARNING; + } + } +} \ No newline at end of file diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java index 8718acecf..f653381fc 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java @@ -58,7 +58,7 @@ public class TransactionNameKeywordService implements Resettable return keywords.stream() .map(TransactionNameKeyword::getValue) - .filter(value -> textLowerCase.contains(value.toLowerCase(Locale.ROOT))) + .filter(value -> textLowerCase.contains(value.toLowerCase())) .toList(); } } diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java index 91f661cc6..332d2b61c 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java @@ -25,6 +25,7 @@ public final class Mappings public static final String TRANSACTIONS = "/transactions"; public static final String TAGS = "/tags"; public static final String HINTS = "/hints"; + public static final String KEYWORDS = "/keywords"; public static final String MIGRATION = "/migration"; } diff --git a/BudgetMasterServer/src/main/resources/static/js/transactions.js b/BudgetMasterServer/src/main/resources/static/js/transactions.js index 046df4d93..2d4f40714 100644 --- a/BudgetMasterServer/src/main/resources/static/js/transactions.js +++ b/BudgetMasterServer/src/main/resources/static/js/transactions.js @@ -480,17 +480,18 @@ function validateForm(allowEmptyAmount = false, skipKeywordCheck = false) function checkNameForKeywords() { let url = document.getElementById('keywordCheckUrl').dataset.url; + let transactionName = document.getElementById('transaction-name').value; let result; $.ajax({ async: false, type: 'GET', - url: url, + url: url + '?transactionName=' + transactionName, data: {}, - success: function(data) + success: function(data, textStatus, request) { - if(data) + if(request.status === 200) { // name contains at least one keyword result = true; diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/empty.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/empty.ftl new file mode 100644 index 000000000..e69de29bb diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl index cd29623fe..0f09255a7 100644 --- a/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl +++ b/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl @@ -304,7 +304,7 @@ </#macro> <#macro buttons cancelURL includeContinueButton> - <div id="keywordCheckUrl" class="hidden" data-url="<@s.url '/transactions/keywordCheck'/>"></div> + <div id="keywordCheckUrl" class="hidden" data-url="<@s.url '/keywords/keywordCheck'/>"></div> <br> <hr> diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl index 19f534606..3ec5be4ee 100644 --- a/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl +++ b/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl @@ -9,7 +9,7 @@ <div class="row"> <div class="sol s12"> ${locale.getString("transaction.warning.name.keyword.description.part1")} - <span id="keyword">${keyword}</span> + <span id="keyword">${transactionNameKeyword}</span> ${locale.getString("transaction.warning.name.keyword.description.part2")} </div> </div> -- GitLab