Summary
Based on the Spring Boot framework, the core
component is built using Maven and OpenJDK. It relies on a PostgreSQL database and stores files on its filesystem.
Sub-components in detail
Each functional object (budget, campaign, idea, …) has its package in src/main/java
folder. In each one of them we create the following structure :
- a model : the object which will be manipulated through the API
- an entity : it inherits from the model, it is the object stored in DB
- a repository : the interface to interact with the DB. Defined methods respects the JPA query lookup strategies
- a controller : entrypoints of each API endpoint
- a service : the main logic of each operation. Can be called from the controller or other components
Data Model

All database structure (tables, foreign keys, functions, …) are provided using Liquibase. Each change in the structure is described in a changeset and all changesets of a version are regrouped in a changelog file inside the src/main/resources/db/changelog
folder.
Tests
Automated tests are written ìn src/test
using Cucumber.
Features are destribed in the features
folder. Each scenario of a feature is composed of functional steps which needs to be translated in Java to perform the corresponding step. These translations are written in a steps
package inside the src/test/java
folder.
Finally, when API calls are required, they are implemented in HTTP clients inside a component
package.