FINERACT-2169: New command processing infrastructure

This commit is contained in:
Aleksandar Vidakovic
2025-04-22 21:50:28 +02:00
committed by Aleksandar Vidakovic
parent fd45f43f36
commit 8d83b5547c
69 changed files with 3069 additions and 16 deletions
@@ -0,0 +1,34 @@
#
# 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.
#
#server.error.include-message=always
#server.error.include-binding-errors=always
#server.error.include-stacktrace=always
debug=true
fineract.command.enabled=true
fineract.command.executor=sync
fineract.command.ring-buffer-size=1024
fineract.command.producer-type=single
spring.liquibase.enabled=true
spring.liquibase.drop-first=true
spring.liquibase.default-schema=public
spring.liquibase.contexts=postgresql
spring.liquibase.change-log=classpath:/db/custom-changelog/0001_command_init.xml
@@ -0,0 +1,71 @@
#
# 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.
#
# common
org.apache.fineract.common.validation.error=Validation Error
org.apache.fineract.common.validation.AssertFalse.message=must be false
org.apache.fineract.common.validation.AssertTrue.message=must be true
org.apache.fineract.common.validation.DecimalMax.message=must be less than ${inclusive == true ? 'or equal to ' : ''}{value}
org.apache.fineract.common.validation.DecimalMin.message=must be greater than ${inclusive == true ? 'or equal to ' : ''}{value}
org.apache.fineract.common.validation.Digits.message=numeric value out of bounds (<{integer} digits>.<{fraction} digits> expected)
org.apache.fineract.common.validation.Email.message=must be a well-formed email address
org.apache.fineract.common.validation.Future.message=must be a future date
org.apache.fineract.common.validation.FutureOrPresent.message=must be a date in the present or in the future
org.apache.fineract.common.validation.Max.message=must be less than or equal to {value}
org.apache.fineract.common.validation.Min.message=must be greater than or equal to {value}
org.apache.fineract.common.validation.Negative.message=must be less than 0
org.apache.fineract.common.validation.NegativeOrZero.message=must be less than or equal to 0
org.apache.fineract.common.validation.NotBlank.message=must not be blank
org.apache.fineract.common.validation.NotEmpty.message=must not be empty
org.apache.fineract.common.validation.NotNull.message=must not be null
org.apache.fineract.common.validation.Null.message=must be null
org.apache.fineract.common.validation.Past.message=must be a past date
org.apache.fineract.common.validation.PastOrPresent.message=must be a date in the past or in the present
org.apache.fineract.common.validation.Pattern.message=must match "{regexp}"
org.apache.fineract.common.validation.Positive.message=must be greater than 0
org.apache.fineract.common.validation.PositiveOrZero.message=must be greater than or equal to 0
org.apache.fineract.common.validation.Size.message=size must be between {min} and {max}
org.apache.fineract.common.validation.CreditCardNumber.message=invalid credit card number
org.apache.fineract.common.validation.Currency.message=invalid currency (must be one of {value})
org.apache.fineract.common.validation.EAN.message=invalid {type} barcode
org.apache.fineract.common.validation.ISBN.message=invalid ISBN
org.apache.fineract.common.validation.Length.message=length must be between {min} and {max}
org.apache.fineract.common.validation.CodePointLength.message=length must be between {min} and {max}
org.apache.fineract.common.validation.LuhnCheck.message=the check digit for ${validatedValue} is invalid, Luhn Modulo 10 checksum failed
org.apache.fineract.common.validation.Mod10Check.message=the check digit for ${validatedValue} is invalid, Modulo 10 checksum failed
org.apache.fineract.common.validation.Mod11Check.message=the check digit for ${validatedValue} is invalid, Modulo 11 checksum failed
org.apache.fineract.common.validation.ModCheck.message=the check digit for ${validatedValue} is invalid, {modType} checksum failed
org.apache.fineract.common.validation.Normalized.message=must be normalized
org.apache.fineract.common.validation.ParametersScriptAssert.message=script expression "{script}" didn't evaluate to true
org.apache.fineract.common.validation.Range.message=must be between {min} and {max}
org.apache.fineract.common.validation.ScriptAssert.message=script expression "{script}" didn't evaluate to true
org.apache.fineract.common.validation.UniqueElements.message=must only contain unique elements
org.apache.fineract.common.validation.URL.message=must be a valid URL
org.apache.fineract.common.validation.UUID.message=must be a valid UUID
org.apache.fineract.common.validation.br.CNPJ.message=invalid Brazilian corporate taxpayer registry number (CNPJ)
org.apache.fineract.common.validation.br.CPF.message=invalid Brazilian individual taxpayer registry number (CPF)
org.apache.fineract.common.validation.br.TituloEleitoral.message=invalid Brazilian Voter ID card number
org.apache.fineract.common.validation.pl.REGON.message=invalid Polish Taxpayer Identification Number (REGON)
org.apache.fineract.common.validation.pl.NIP.message=invalid VAT Identification Number (NIP)
org.apache.fineract.common.validation.pl.PESEL.message=invalid Polish National Identification Number (PESEL)
org.apache.fineract.common.validation.ru.INN.message=invalid Russian taxpayer identification number (INN)
org.apache.fineract.common.validation.time.DurationMax.message=must be shorter than${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'}
org.apache.fineract.common.validation.time.DurationMin.message=must be longer than${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'}
# dummy
org.apache.fineract.dummy.request.content.not-empty=Dummy request content must have a value
@@ -0,0 +1,70 @@
#
# 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.
#
# common
org.apache.fineract.common.validation.error=Fehler
org.apache.fineract.common.validation.AssertFalse.message=muss falsch sein
org.apache.fineract.common.validation.AssertTrue.message=muss wahr sein
org.apache.fineract.common.validation.DecimalMax.message=muss kleiner ${inclusive == true ? 'oder gleich ' : ''}{value} sein
org.apache.fineract.common.validation.DecimalMin.message=muss gr\u00f6\u00dfer ${inclusive == true ? 'oder gleich ' : ''}{value} sein
org.apache.fineract.common.validation.Digits.message=numerischer Wert au\u00dferhalb des g\u00fcltigen Bereichs (<{integer} digits>.<{fraction} digits> erwartet)
org.apache.fineract.common.validation.Email.message=muss eine korrekt formatierte E-Mail-Adresse sein
org.apache.fineract.common.validation.Future.message=muss ein Datum in der Zukunft sein
org.apache.fineract.common.validation.FutureOrPresent.message=muss ein Datum in der Gegenwart oder in der Zukunft sein
org.apache.fineract.common.validation.Max.message=muss kleiner-gleich {value} sein
org.apache.fineract.common.validation.Min.message=muss gr\u00f6\u00dfer-gleich {value} sein
org.apache.fineract.common.validation.Negative.message=muss kleiner als 0 sein
org.apache.fineract.common.validation.NegativeOrZero.message=muss kleiner-gleich 0 sein
org.apache.fineract.common.validation.NotBlank.message=darf nicht leer sein
org.apache.fineract.common.validation.NotEmpty.message=darf nicht leer sein
org.apache.fineract.common.validation.NotNull.message=darf nicht null sein
org.apache.fineract.common.validation.Null.message=muss null sein
org.apache.fineract.common.validation.Past.message=muss ein Datum in der Vergangenheit sein
org.apache.fineract.common.validation.PastOrPresent.message=muss ein Datum in der Vergangenheit oder in der Gegenwart sein
org.apache.fineract.common.validation.Pattern.message=muss mit "{regexp}" \u00fcbereinstimmen
org.apache.fineract.common.validation.Positive.message=muss gr\u00f6\u00dfer als 0 sein
org.apache.fineract.common.validation.PositiveOrZero.message=muss gr\u00f6\u00dfer-gleich 0 sein
org.apache.fineract.common.validation.Size.message=Gr\u00f6\u00dfe muss zwischen {min} und {max} sein
org.apache.fineract.common.validation.CreditCardNumber.message=ung\u00fcltige Kreditkartennummer
org.apache.fineract.common.validation.Currency.message=ung\u00fcltige W\u00e4hrung (muss eine der folgenden sein: {value})
org.apache.fineract.common.validation.EAN.message=ung\u00fcltiger {type}-Barcode
org.apache.fineract.common.validation.ISBN.message=ung\u00fcltige ISBN
org.apache.fineract.common.validation.Length.message=L\u00e4nge muss zwischen {min} und {max} sein
org.apache.fineract.common.validation.CodePointLength.message=L\u00e4nge muss zwischen {min} und {max} sein
org.apache.fineract.common.validation.LuhnCheck.message=die Pr\u00fcfziffer f\u00fcr ${validatedValue} ist ung\u00fcltig, Luhn Modulo 10-Kontrollsumme ist fehlgeschlagen
org.apache.fineract.common.validation.Mod10Check.message=die Pr\u00fcfziffer f\u00fcr ${validatedValue} ist ung\u00fcltig, Modulo 10-Kontrollsumme ist fehlgeschlagen
org.apache.fineract.common.validation.Mod11Check.message=die Pr\u00fcfziffer f\u00fcr ${validatedValue} ist ung\u00fcltig, Modulo 11-Kontrollsumme ist fehlgeschlagen
org.apache.fineract.common.validation.ModCheck.message=die Pr\u00fcfziffer f\u00fcr ${validatedValue} ist ung\u00fcltig, {modType}-Kontrollsumme ist fehlgeschlagen
org.apache.fineract.common.validation.ParametersScriptAssert.message=die Evaluierung des Scriptausdrucks "{script}" ergab nicht true
org.apache.fineract.common.validation.Range.message=muss zwischen {min} und {max} sein
org.apache.fineract.common.validation.ScriptAssert.message=die Evaluierung des Scriptausdrucks "{script}" ergab nicht true
org.apache.fineract.common.validation.UniqueElements.message=darf nur eindeutige Elemente enthalten
org.apache.fineract.common.validation.URL.message=muss eine g\u00fcltige URL sein
org.apache.fineract.common.validation.UUID.message=muss eine g\u00fcltige UUID sein
org.apache.fineract.common.validation.br.CNPJ.message=ung\u00fcltige brasilianische Registriernummer f\u00fcr K\u00f6rperschaftssteuerzahlungen (CNPJ)
org.apache.fineract.common.validation.br.CPF.message=ung\u00fcltige brasilianische Registriernummer f\u00fcr Steuerzahlungen nat\u00fcrlicher Personen (CPF)
org.apache.fineract.common.validation.br.TituloEleitoral.message=ung\u00fcltige brasilianische ID-Karte f\u00fcr Entscheidungsberechtigte
org.apache.fineract.common.validation.pl.REGON.message=ung\u00fcltige polnische Steuerzahleridentifikationsnummer (REGON)
org.apache.fineract.common.validation.pl.NIP.message=ung\u00fcltige Mehrwertsteueridentifikationsnummer (NIP)
org.apache.fineract.common.validation.pl.PESEL.message=ung\u00fcltige polnische nationale Identifikationsnummer (PESEL)
org.apache.fineract.common.validation.ru.INN.message=ung\u00fcltige russisch Steuerzahleridentifikationsnummer (INN)
org.apache.fineract.common.validation.time.DurationMax.message=muss k\u00fcrzer sein als${inclusive == true ? ' oder gleich' : ''}${days == 0 ? '' : days == 1 ? ' 1 Tag' : ' ' += days += ' Tage'}${hours == 0 ? '' : hours == 1 ? ' 1 Stunde' : ' ' += hours += ' Stunden'}${minutes == 0 ? '' : minutes == 1 ? ' 1 Minute' : ' ' += minutes += ' Minuten'}${seconds == 0 ? '' : seconds == 1 ? ' 1 Sekunde' : ' ' += seconds += ' Sekunden'}${millis == 0 ? '' : millis == 1 ? ' 1 Millisekunde' : ' ' += millis += ' Millisekunden'}${nanos == 0 ? '' : nanos == 1 ? ' 1 Nanosekunde' : ' ' += nanos += ' Nanosekunden'}
org.apache.fineract.common.validation.time.DurationMin.message=muss gr\u00f6\u00dfer sein als${inclusive == true ? ' oder gleich' : ''}${days == 0 ? '' : days == 1 ? ' 1 Tag' : ' ' += days += ' Tage'}${hours == 0 ? '' : hours == 1 ? ' 1 Stunde' : ' ' += hours += ' Stunden'}${minutes == 0 ? '' : minutes == 1 ? ' 1 Minute' : ' ' += minutes += ' Minuten'}${seconds == 0 ? '' : seconds == 1 ? ' 1 Sekunde' : ' ' += seconds += ' Sekunden'}${millis == 0 ? '' : millis == 1 ? ' 1 Millisekunde' : ' ' += millis += ' Millisekunden'}${nanos == 0 ? '' : nanos == 1 ? ' 1 Nanosekunde' : ' ' += nanos += ' Nanosekunden'}
# dummy
org.apache.fineract.dummy.request.content.not-empty=Dummy Request Attribut muss einen Wert enthalten
@@ -0,0 +1,71 @@
#
# 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.
#
# common
org.apache.fineract.common.validation.error=Validation Error
org.apache.fineract.common.validation.AssertFalse.message=must be false
org.apache.fineract.common.validation.AssertTrue.message=must be true
org.apache.fineract.common.validation.DecimalMax.message=must be less than ${inclusive == true ? 'or equal to ' : ''}{value}
org.apache.fineract.common.validation.DecimalMin.message=must be greater than ${inclusive == true ? 'or equal to ' : ''}{value}
org.apache.fineract.common.validation.Digits.message=numeric value out of bounds (<{integer} digits>.<{fraction} digits> expected)
org.apache.fineract.common.validation.Email.message=must be a well-formed email address
org.apache.fineract.common.validation.Future.message=must be a future date
org.apache.fineract.common.validation.FutureOrPresent.message=must be a date in the present or in the future
org.apache.fineract.common.validation.Max.message=must be less than or equal to {value}
org.apache.fineract.common.validation.Min.message=must be greater than or equal to {value}
org.apache.fineract.common.validation.Negative.message=must be less than 0
org.apache.fineract.common.validation.NegativeOrZero.message=must be less than or equal to 0
org.apache.fineract.common.validation.NotBlank.message=must not be blank
org.apache.fineract.common.validation.NotEmpty.message=must not be empty
org.apache.fineract.common.validation.NotNull.message=must not be null
org.apache.fineract.common.validation.Null.message=must be null
org.apache.fineract.common.validation.Past.message=must be a past date
org.apache.fineract.common.validation.PastOrPresent.message=must be a date in the past or in the present
org.apache.fineract.common.validation.Pattern.message=must match "{regexp}"
org.apache.fineract.common.validation.Positive.message=must be greater than 0
org.apache.fineract.common.validation.PositiveOrZero.message=must be greater than or equal to 0
org.apache.fineract.common.validation.Size.message=size must be between {min} and {max}
org.apache.fineract.common.validation.CreditCardNumber.message=invalid credit card number
org.apache.fineract.common.validation.Currency.message=invalid currency (must be one of {value})
org.apache.fineract.common.validation.EAN.message=invalid {type} barcode
org.apache.fineract.common.validation.ISBN.message=invalid ISBN
org.apache.fineract.common.validation.Length.message=length must be between {min} and {max}
org.apache.fineract.common.validation.CodePointLength.message=length must be between {min} and {max}
org.apache.fineract.common.validation.LuhnCheck.message=the check digit for ${validatedValue} is invalid, Luhn Modulo 10 checksum failed
org.apache.fineract.common.validation.Mod10Check.message=the check digit for ${validatedValue} is invalid, Modulo 10 checksum failed
org.apache.fineract.common.validation.Mod11Check.message=the check digit for ${validatedValue} is invalid, Modulo 11 checksum failed
org.apache.fineract.common.validation.ModCheck.message=the check digit for ${validatedValue} is invalid, {modType} checksum failed
org.apache.fineract.common.validation.Normalized.message=must be normalized
org.apache.fineract.common.validation.ParametersScriptAssert.message=script expression "{script}" didn't evaluate to true
org.apache.fineract.common.validation.Range.message=must be between {min} and {max}
org.apache.fineract.common.validation.ScriptAssert.message=script expression "{script}" didn't evaluate to true
org.apache.fineract.common.validation.UniqueElements.message=must only contain unique elements
org.apache.fineract.common.validation.URL.message=must be a valid URL
org.apache.fineract.common.validation.UUID.message=must be a valid UUID
org.apache.fineract.common.validation.br.CNPJ.message=invalid Brazilian corporate taxpayer registry number (CNPJ)
org.apache.fineract.common.validation.br.CPF.message=invalid Brazilian individual taxpayer registry number (CPF)
org.apache.fineract.common.validation.br.TituloEleitoral.message=invalid Brazilian Voter ID card number
org.apache.fineract.common.validation.pl.REGON.message=invalid Polish Taxpayer Identification Number (REGON)
org.apache.fineract.common.validation.pl.NIP.message=invalid VAT Identification Number (NIP)
org.apache.fineract.common.validation.pl.PESEL.message=invalid Polish National Identification Number (PESEL)
org.apache.fineract.common.validation.ru.INN.message=invalid Russian taxpayer identification number (INN)
org.apache.fineract.common.validation.time.DurationMax.message=must be shorter than${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'}
org.apache.fineract.common.validation.time.DurationMin.message=must be longer than${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'}
# dummy
org.apache.fineract.dummy.request.content.not-empty=Dummy request content must have a value