diff --git a/build.gradle b/build.gradle index 587b01a0e..f944ef766 100644 --- a/build.gradle +++ b/build.gradle @@ -33,6 +33,7 @@ buildscript { 'fineract-branch', 'fineract-document', 'fineract-investor', + 'fineract-rates', 'fineract-loan', 'fineract-savings', 'integration-tests', @@ -53,6 +54,7 @@ buildscript { 'fineract-accounting', 'fineract-provider', 'fineract-investor', + 'fineract-rates', 'fineract-loan', 'fineract-savings', 'fineract-branch', diff --git a/fineract-loan/dependencies.gradle b/fineract-loan/dependencies.gradle index 467fc305f..5cf7cdd1c 100644 --- a/fineract-loan/dependencies.gradle +++ b/fineract-loan/dependencies.gradle @@ -26,6 +26,7 @@ dependencies { // implementation(project(path: ':fineract-core')) implementation(project(path: ':fineract-accounting')) + implementation(project(path: ':fineract-rates')) implementation( 'org.springframework.boot:spring-boot-starter-web', diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle index 38433c3ab..6e64f5abf 100644 --- a/fineract-provider/dependencies.gradle +++ b/fineract-provider/dependencies.gradle @@ -27,6 +27,7 @@ dependencies { implementation(project(path: ':fineract-core')) implementation(project(path: ':fineract-accounting')) implementation(project(path: ':fineract-investor')) + implementation(project(path: ':fineract-rates')) implementation(project(path: ':fineract-loan')) implementation(project(path: ':fineract-savings')) implementation(project(path: ':fineract-branch')) diff --git a/fineract-rates/build.gradle b/fineract-rates/build.gradle new file mode 100644 index 000000000..279cd9d99 --- /dev/null +++ b/fineract-rates/build.gradle @@ -0,0 +1,106 @@ +/** + * 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. + */ +description = 'Fineract Rates' + +apply plugin: 'java' +apply plugin: 'eclipse' + +compileJava.doLast { + def mainSS = sourceSets.main + def source = mainSS.java.classesDirectory.get() + copy { + from file("src/main/resources/jpa/rates/persistence.xml") + into "${source}/META-INF/" + } + javaexec { + description = 'Performs EclipseLink static weaving of entity classes' + def target = source + main 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' + args '-persistenceinfo', source, source, target + classpath sourceSets.main.runtimeClasspath + } + delete { + delete "${source}/META-INF/persistence.xml" + } +} + +// Configuration for Swagger documentation generation task +// https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-gradle-plugin +import org.apache.tools.ant.filters.ReplaceTokens + + + +configurations { + providedRuntime // needed for Spring Boot executable WAR + providedCompile + compile() { + exclude module: 'hibernate-entitymanager' + exclude module: 'hibernate-validator' + exclude module: 'activation' + exclude module: 'bcmail-jdk14' + exclude module: 'bcprov-jdk14' + exclude module: 'bctsp-jdk14' + exclude module: 'c3p0' + exclude module: 'stax-api' + exclude module: 'jaxb-api' + exclude module: 'jaxb-impl' + exclude module: 'jboss-logging' + exclude module: 'itext-rtf' + exclude module: 'classworlds' + } + runtime +} + +apply from: 'dependencies.gradle' + +// Configuration for the modernizer plugin +// https://github.com/andygoossens/gradle-modernizer-plugin +modernizer { + ignoreClassNamePatterns = [ + '.*AbstractPersistableCustom', + '.*EntityTables', + '.*domain.*' + ] +} + +// If we are running Gradle within Eclipse to enhance classes with OpenJPA, +// set the classes directory to point to Eclipse's default build directory +if (project.hasProperty('env') && project.getProperty('env') == 'eclipse') { + sourceSets.main.java.outputDir = new File(rootProject.projectDir, "fineract-rates/bin/main") +} + +eclipse { + project { + buildCommand([ LaunchConfigHandle: "/.externalToolBuilders/OpenJPA Enhance Builder.launch" ], 'org.eclipse.ui.externaltools.ExternalToolBuilder') + } +} + +/* http://stackoverflow.com/questions/19653311/jpa-repository-works-in-idea-and-production-but-not-in-gradle */ +sourceSets.main.output.resourcesDir = sourceSets.main.java.classesDirectory +sourceSets.test.output.resourcesDir = sourceSets.test.java.classesDirectory + +if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { + sourceSets { + test { + java { + exclude '**/core/boot/tests/**' + } + } + } +} diff --git a/fineract-rates/dependencies.gradle b/fineract-rates/dependencies.gradle new file mode 100644 index 000000000..bd2a15867 --- /dev/null +++ b/fineract-rates/dependencies.gradle @@ -0,0 +1,74 @@ +/** + * 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. + */ + +dependencies { + // Never use "compile" scope, but make all dependencies either 'implementation', 'runtimeOnly' or 'testCompile'. + // Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library. + // We also (normally should have) no need to ever use 'compileOnly'. + + // implementation dependencies are directly used (compiled against) in src/main (and src/test) + // + implementation(project(path: ':fineract-core')) + + implementation( + 'org.springframework.boot:spring-boot-starter-web', + 'org.springframework.boot:spring-boot-starter-security', + 'jakarta.ws.rs:jakarta.ws.rs-api', + 'org.glassfish.jersey.media:jersey-media-multipart', + + 'com.google.guava:guava', + 'com.google.code.gson:gson', + + 'org.apache.commons:commons-lang3', + + 'com.jayway.jsonpath:json-path', + + 'com.github.spotbugs:spotbugs-annotations', + 'io.swagger.core.v3:swagger-annotations-jakarta', + + 'com.squareup.retrofit2:converter-gson', + + 'org.springdoc:springdoc-openapi-starter-webmvc-ui', + 'org.mapstruct:mapstruct', + + 'io.github.resilience4j:resilience4j-spring-boot3', + 'org.apache.httpcomponents:httpcore', + ) + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + annotationProcessor 'org.mapstruct:mapstruct-processor' + implementation ('org.springframework.boot:spring-boot-starter-data-jpa') { + exclude group: 'org.hibernate' + } + implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') { + exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence' + } + // testCompile dependencies are ONLY used in src/test, not src/main. + // Do NOT repeat dependencies which are ALREADY in implementation or runtimeOnly! + // + testImplementation( 'io.github.classgraph:classgraph' ) + testImplementation ('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'com.jayway.jsonpath', module: 'json-path' + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + exclude group: 'jakarta.activation' + exclude group: 'javax.activation' + exclude group: 'org.skyscreamer' + } + testImplementation ('org.mockito:mockito-inline') +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResourceSwagger.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResourceSwagger.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResourceSwagger.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResourceSwagger.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/InterestRatePeriodData.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/InterestRatePeriodData.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/InterestRatePeriodData.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/InterestRatePeriodData.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepository.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepository.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepository.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepository.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepositoryWrapper.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepositoryWrapper.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepositoryWrapper.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRateRepositoryWrapper.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/exception/FloatingRateNotFoundException.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/exception/FloatingRateNotFoundException.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/exception/FloatingRateNotFoundException.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/exception/FloatingRateNotFoundException.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformService.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformService.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformServiceImpl.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformServiceImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformServiceImpl.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRateWritePlatformServiceImpl.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformService.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformService.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/starter/FloatingRatesConfiguration.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/starter/FloatingRatesConfiguration.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/starter/FloatingRatesConfiguration.java rename to fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/starter/FloatingRatesConfiguration.java diff --git a/fineract-rates/src/main/resources/jpa/rates/db/changelog/tenant/module/rates/module-changelog-master.xml b/fineract-rates/src/main/resources/jpa/rates/db/changelog/tenant/module/rates/module-changelog-master.xml new file mode 100644 index 000000000..23c7ed918 --- /dev/null +++ b/fineract-rates/src/main/resources/jpa/rates/db/changelog/tenant/module/rates/module-changelog-master.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/fineract-rates/src/main/resources/jpa/rates/persistence.xml b/fineract-rates/src/main/resources/jpa/rates/persistence.xml new file mode 100644 index 000000000..49d7498ea --- /dev/null +++ b/fineract-rates/src/main/resources/jpa/rates/persistence.xml @@ -0,0 +1,76 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.accounting.journalentry.domain.JournalEntry + org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom + org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.codes.domain.CodeValue + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.office.domain.OrganisationCurrency + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.charge.domain.Charge + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + false + + + + + diff --git a/fineract-savings/dependencies.gradle b/fineract-savings/dependencies.gradle index 467fc305f..5cf7cdd1c 100644 --- a/fineract-savings/dependencies.gradle +++ b/fineract-savings/dependencies.gradle @@ -26,6 +26,7 @@ dependencies { // implementation(project(path: ':fineract-core')) implementation(project(path: ':fineract-accounting')) + implementation(project(path: ':fineract-rates')) implementation( 'org.springframework.boot:spring-boot-starter-web', diff --git a/fineract-war/build.gradle b/fineract-war/build.gradle index 7aa5b5445..0553f56b1 100644 --- a/fineract-war/build.gradle +++ b/fineract-war/build.gradle @@ -51,7 +51,11 @@ dependencies { implementation project(':fineract-core') implementation project(':fineract-accounting') implementation project(':fineract-investor') + implementation project(':fineract-branch') + implementation project(':fineract-document') + implementation project(':fineract-rates') implementation project(':fineract-loan') + implementation project(':fineract-savings') implementation project(':fineract-provider') } diff --git a/integration-tests/dependencies.gradle b/integration-tests/dependencies.gradle index 8b3438926..f4d2e41eb 100644 --- a/integration-tests/dependencies.gradle +++ b/integration-tests/dependencies.gradle @@ -25,6 +25,7 @@ dependencies { project(path: ':fineract-core', configuration: 'runtimeElements'), project(path: ':fineract-accounting', configuration: 'runtimeElements'), project(path: ':fineract-investor', configuration: 'runtimeElements'), + project(path: ':fineract-rates', configuration: 'runtimeElements'), project(path: ':fineract-loan', configuration: 'runtimeElements'), project(path: ':fineract-savings', configuration: 'runtimeElements'), project(path: ':fineract-provider', configuration: 'runtimeElements'), diff --git a/settings.gradle b/settings.gradle index 16a89ae35..c37631e13 100644 --- a/settings.gradle +++ b/settings.gradle @@ -54,6 +54,7 @@ include ':fineract-provider' include ':fineract-branch' include ':fineract-document' include ':fineract-investor' +include ':fineract-rates' include ':fineract-loan' include ':fineract-savings' include ':fineract-war'