All notable changes to the IGRP Spring Engine project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Future features and improvements will be listed here before they are released
- Upcoming changes to existing functionality will be listed here
- Soon-to-be removed features will be listed here
- Features that have been removed will be listed here
- Bug fixes will be listed here
- Security improvements will be listed here
0.1.0-beta.1 - 2025-07-18
.env.examplefile to the project root as a template for environment variables- Serves as a base reference for developers to create their own
.envfile - Note: This does not affect existing projects — only new ones will include this file automatically
- Serves as a base reference for developers to create their own
- Updated
.gitignoreand.dockerignoreto:- Ignore
.env(to avoid leaking local secrets) - Include
.env.example(so the template is tracked and shared)
- Ignore
-
🔧 Project Structure Refactoring
- Major restructuring of the project to improve clarity, modularity, and encourage clean separation between persistence and business logic
- Follows clean architecture and Domain-Driven Design (DDD) principles
-
Configuration Changes
-
Adjustment to the structure of the
.igrpstudio/baseApi.jsonfile:- Removed field
springBootVersion - Renamed field
igrpCoreVersiontoversionand set it to0.1.0-beta.1
- Removed field
-
Adjustment to the
pom.xmlfile:- Added the following properties:
<igrp.version>0.1.0-beta.1</igrp.version>- Used by IGRP framework dependencies, for example:<!-- IGRP dependencies --> <dependency> <groupId>cv.igrp.framework</groupId> <artifactId>core</artifactId> <version>${igrp.version}</version> </dependency> <dependency> <groupId>cv.igrp.framework</groupId> <artifactId>stereotype</artifactId> <version>${igrp.version}</version> </dependency> <!-- IGRP File Libraries --> <dependency> <groupId>cv.igrp.platform</groupId> <artifactId>filemanager</artifactId> <version>${igrp.version}</version> </dependency> <dependency> <groupId>cv.igrp.framework.filemanager</groupId> <artifactId>minio</artifactId> <version>${igrp.version}</version> </dependency> <!-- IGRP Report Libraries --> <dependency> <groupId>cv.igrp.platform</groupId> <artifactId>report</artifactId> <version>${igrp.version}</version> </dependency> <dependency> <groupId>cv.igrp.framework.report</groupId> <artifactId>jasper</artifactId> <version>${igrp.version}</version> </dependency>
<java.version>23</java.version>- Specifies the Java version for the project<spring-cloud.version>2025.0.0</spring-cloud.version>- Used by Spring Cloud dependencies<springdoc.version>2.8.9</springdoc.version>- Used by SpringDoc OpenAPI UI
- Added the following properties:
-
-
Architecture Layer Changes
-
Domain Layer:
- The
domainpackage was redefined to serve strictly as the space for business logic implementation - Subpackages such as
model,repository,service, andeventsremain present but are now empty by default, allowing developers to structure their logic intentionally - The previously generated CRUD interface that was placed in
domain/repository(which exposed CRUD operations over the persistence entity) was removed, eliminating persistence concerns from the domain
- The
-
Persistence Layer:
- The persistence entity was moved from
domain/modeltopersistence/entityand renamed with the suffixEntity - JPA repositories were organized under
persistence/repository, keeping the naming convention based on the entity name (e.g.,XEntityRepository)
- The persistence entity was moved from
-
Application Layer:
- The
handlerssubpackages insideapplication/commandsandapplication/querieswere removed - Handlers are now placed directly within their respective
commandsorqueriespackages to simplify structure
- The
-
Interface Layer:
- Controllers were moved from
infrastructure/controllertointerfaces/restfor a clearer representation of the system's entry points
- Controllers were moved from
-
application/
└── commands/
├── commands/
│ └── SomeCommand.java
└── handlers/
└── SomeCommandHandler.java
└── queries/
├── queries/
│ └── SomeQuery.java
└── handlers/
└── SomeQueryHandler.java
domain/
├── model/
│ └── <Entity.java>
├── repository/
│ └── I<EntityRepository.java>
├── service/
└── events/
infrastructure/
├── persistence/
│ └── <EntityRepository.java> (JPA repository)
└── controller/
└── <Controller.java>
application/
├── commands/
│ ├── SomeCommand.java
│ └── SomeCommandHandler.java
├── queries/
│ ├── SomeQuery.java
│ └── SomeQueryHandler.java
domain/
├── model/
├── repository/
├── service/
└── events/
(all empty by default – for business logic only)
persistence/
├── entity/
│ └── <EntityEntity.java>
└── repository/
└── <EntityEntityRepository.java>
interfaces/
└── rest/
└── <Controller.java>
- Establish a clear separation of concerns between layers
- Isolate domain logic from infrastructure and persistence
- Simplify folder structure to enhance readability and maintainability
- Provide a clean starting point for developers to define business logic manually