From 8d064ddf6c674b5bc23bb326a23d985a30e76251 Mon Sep 17 00:00:00 2001 From: Aleksandar Vidakovic Date: Mon, 2 Feb 2026 19:43:45 +0100 Subject: [PATCH] FINERACT-2452: New command processing - audit Co-Authored-By: Adam Saghy Co-Authored-By: Yu Wati Nyi --- config/docker/compose/fineract.yml | 2 +- config/docker/env/mariadb.env | 20 +++ docker-compose-community-app.yml | 1 - docker-compose-custom.yml | 1 - docker-compose-development.yml | 2 - docker-compose-mariadb.yml | 34 ++++ docker-compose.yml | 2 - .../module/fineract-cob/persistence.xml | 4 - fineract-command/README.md | 8 +- fineract-command/REFACTORING.md | 3 +- fineract-command/dependencies.gradle | 6 +- .../apache/fineract/command/core/Command.java | 27 ++- .../fineract/command/core/CommandAuditor.java | 30 ++++ .../command/core/CommandConstants.java | 5 +- .../fineract/command/core/CommandHandler.java | 8 + .../command/core/CommandProperties.java | 12 ++ .../AsynchronousCommandExecutor.java | 52 ++++-- .../implementation/BaseCommandExecutor.java | 34 ++++ .../implementation/BaseCommandPipeline.java | 90 ++++++++++ .../implementation/DefaultCommandAuditor.java | 168 ++++++++++++++++++ .../DefaultCommandPipeline.java | 11 +- .../DisruptorCommandExecutor.java | 39 ++-- .../SynchronousCommandExecutor.java | 38 ++-- .../converter/JsonNodeReadingConverter.java} | 26 +-- ...ter.java => JsonNodeWritingConverter.java} | 34 +--- .../persistence/domain/CommandEntity.java | 82 +++++---- .../domain/CommandEntityState.java} | 8 +- .../persistence/domain/CommandRepository.java | 10 +- .../mapping/CommandJsonMapper.java | 9 +- .../persistence/mapping/CommandMapper.java | 38 +++- .../command/starter/CommandConfiguration.java | 7 +- .../CommandPersistenceConfiguration.java | 16 +- .../command/module-changelog-master.xml | 27 +++ .../command/parts}/0001_command_init.xml | 10 ++ .../parts/0002_command_fix_structure.xml | 60 +++++++ .../module/fineract-command/persistence.xml | 43 ----- .../fineract/command/CommandBaseTest.java | 59 ++++-- .../command/CommandPersistenceTest.java | 26 ++- .../command/CommandPipelineBenchmark.java | 38 ++-- .../fineract/command/CommandPipelineTest.java | 55 ++++-- .../command/CommandSampleApiTest.java | 83 +++++++-- .../fineract/command/TestConfiguration.java | 5 +- .../sample/api/DummyApiController.java | 17 +- .../sample/command/DummyErrorCommand.java | 28 +++ .../sample/data/DummyErrorRequest.java | 42 +++++ .../sample/data/DummyErrorResponse.java | 41 +++++ .../command/sample/data/DummyRequest.java | 3 - .../command/sample/data/DummyResponse.java | 5 - .../sample/exception/DummyException.java | 26 +++ .../sample/handler/DummyCommandHandler.java | 10 ++ .../DummyErrorCommandHandler.java} | 27 +-- .../sample/service/DefaultDummyService.java | 3 +- .../resources/application-test.properties | 4 +- .../api/BusinessDateApiResource.java | 9 +- .../handler/BusinessDateUpdateHandler.java | 8 + .../cache/api/CacheApiResource.java | 4 - .../handler/CacheSwitchCommandHandler.java | 8 + ...ExternalEventConfigurationApiResource.java | 8 +- ...ternalEventConfigurationUpdateHandler.java | 8 + .../monetary/api/CurrenciesApiResource.java | 4 - .../handler/CurrencyUpdateCommandHandler.java | 9 + .../test/helper/BusinessDateHelper.java | 2 +- .../stepdef/common/BusinessDateStepDef.java | 4 +- .../ExternalEventSuiteInitializerStep.java | 2 +- .../core/config/jpa/JPAConfig.java | 3 +- .../src/main/resources/application.properties | 57 +++++- .../db/changelog/db.changelog-master.xml | 1 + .../module/fineract-provider/persistence.xml | 5 - .../ClasspathDuplicatesStepDefinitions.java | 2 +- .../resources/application-test.properties | 1 + .../helpers/FeignBusinessDateHelper.java | 2 +- .../common/BusinessDateHelper.java | 2 +- .../externalevents/ExternalEventHelper.java | 2 +- 73 files changed, 1217 insertions(+), 363 deletions(-) create mode 100644 config/docker/env/mariadb.env create mode 100644 docker-compose-mariadb.yml create mode 100644 fineract-command/src/main/java/org/apache/fineract/command/core/CommandAuditor.java create mode 100644 fineract-command/src/main/java/org/apache/fineract/command/implementation/BaseCommandExecutor.java create mode 100644 fineract-command/src/main/java/org/apache/fineract/command/implementation/BaseCommandPipeline.java create mode 100644 fineract-command/src/main/java/org/apache/fineract/command/implementation/DefaultCommandAuditor.java rename fineract-command/src/{test/java/org/apache/fineract/command/sample/middleware/DummyMiddleware.java => main/java/org/apache/fineract/command/persistence/converter/JsonNodeReadingConverter.java} (63%) rename fineract-command/src/main/java/org/apache/fineract/command/persistence/converter/{JsonAttributeConverter.java => JsonNodeWritingConverter.java} (56%) rename fineract-command/src/main/java/org/apache/fineract/command/{core/CommandMiddleware.java => persistence/domain/CommandEntityState.java} (82%) create mode 100644 fineract-command/src/main/resources/db/changelog/tenant/module/command/module-changelog-master.xml rename fineract-command/src/main/resources/db/{custom-changelog => changelog/tenant/module/command/parts}/0001_command_init.xml (88%) create mode 100644 fineract-command/src/main/resources/db/changelog/tenant/module/command/parts/0002_command_fix_structure.xml delete mode 100644 fineract-command/src/main/resources/jpa/static-weaving/module/fineract-command/persistence.xml create mode 100644 fineract-command/src/test/java/org/apache/fineract/command/sample/command/DummyErrorCommand.java create mode 100644 fineract-command/src/test/java/org/apache/fineract/command/sample/data/DummyErrorRequest.java create mode 100644 fineract-command/src/test/java/org/apache/fineract/command/sample/data/DummyErrorResponse.java create mode 100644 fineract-command/src/test/java/org/apache/fineract/command/sample/exception/DummyException.java rename fineract-command/src/test/java/org/apache/fineract/command/sample/{middleware/DummyIdempotencyMiddleware.java => handler/DummyErrorCommandHandler.java} (55%) diff --git a/config/docker/compose/fineract.yml b/config/docker/compose/fineract.yml index 0d411844e..ae5323c41 100644 --- a/config/docker/compose/fineract.yml +++ b/config/docker/compose/fineract.yml @@ -21,7 +21,7 @@ version: "3.8" services: fineract: # user: "${FINERACT_USER}:${FINERACT_GROUP}" - image: ${IMAGE_NAME:-apache/fineract:latest} + image: fineract:latest volumes: - ${PWD}/config/docker/logback/logback-override.xml:/app/logback-override.xml - ${PWD}/config/docker/aws/etc/credentials:/etc/aws/credentials:ro diff --git a/config/docker/env/mariadb.env b/config/docker/env/mariadb.env new file mode 100644 index 000000000..26aae0972 --- /dev/null +++ b/config/docker/env/mariadb.env @@ -0,0 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +MARIADB_ROOT_PASSWORD=mysql \ No newline at end of file diff --git a/docker-compose-community-app.yml b/docker-compose-community-app.yml index 612cec5c7..b06608452 100644 --- a/docker-compose-community-app.yml +++ b/docker-compose-community-app.yml @@ -16,7 +16,6 @@ # under the License. # -version: "3.8" services: # Frontend service community-app: diff --git a/docker-compose-custom.yml b/docker-compose-custom.yml index ecb2d72ec..b6c29dd31 100644 --- a/docker-compose-custom.yml +++ b/docker-compose-custom.yml @@ -17,7 +17,6 @@ # # You can replace and test a more recent version of docker compose -version: "3.8" services: db: extends: diff --git a/docker-compose-development.yml b/docker-compose-development.yml index 6ce2dc7d4..d32e271a2 100644 --- a/docker-compose-development.yml +++ b/docker-compose-development.yml @@ -27,8 +27,6 @@ x-logging: &default-logging - regex: expression: '^(?P\d{4}-\d{2}-\d{2}) (?P