From fc932935c5318287cedfe358bd3b87384e19c168 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Wed, 21 May 2025 20:56:39 -0300 Subject: [PATCH 1/5] docs: improve README.md --- README.md | 114 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 87 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 3fefda0..f564ac2 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,109 @@ +[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE.txt) + # Backend Core -Commons utilities for backend enterprise application development +Common utilities for backend enterprise application development. + +Backend Core provides a set of modular libraries to help you implement clean architecture (three-tier, hexagonal, DDD) in your enterprise Java applications. It includes: + +- **Model layer**: domain interfaces and DTOs (`backend-core-model`) +- **Data layer**: persistence contracts (`backend-core-data`) and JPA-based implementations (`backend-core-data-impl`) +- **Service layer**: business logic contracts (`backend-core-business`) and default implementations (`backend-core-business-impl`) +- **Spring Boot integration**: auto-configuration support (`backend-core-business-spring-impl`) + +## Features + +- Generic CRUD interfaces and base implementations +- Strongly-typed filtering and query support +- Reusable service layering and transactional support +- Spring Boot integration for easy wiring +- Fully documented design and examples + +## Getting Started + +### Prerequisites + +- Java 17 or higher +- Maven 3.x + +### Build from Source + +```bash +git clone https://github.com/FlowingCode/backend-core.git +cd backend-core +mvn clean install +``` + +### Generate Documentation + +```bash +mvn site +# Open target/site/index.html in your browser +``` -## What is backend-core? +## Usage -It's a set of common interfaces and implementations that allows to implement some of the principles of a clean architectural design for enterprise applications. +### Available Modules -For more info, please refer to [Documentation](src/site/markdown/index.md) +| Module | Description | +|------------------------------------|----------------------------------------------------------------------| +| `backend-core-model` | Domain interfaces, DTOs, exceptions and validation | +| `backend-core-data` | DAO contracts (CRUD, Query, etc.) | +| `backend-core-data-impl` | JPA implementations for DAO contracts | +| `backend-core-business` | Service contracts (business logic interfaces) | +| `backend-core-business-impl` | Default implementations for business/service contracts | +| `backend-core-business-spring-impl`| Spring Boot auto-configuration for services and repositories | -Snapshots are available [here](https://maven.flowingcode.com/snapshots). +Add the desired module(s) to your project's dependencies: -## Download release +```xml + + + com.flowingcode.backend-core + backend-core-data + 1.1.0-SNAPSHOT + +``` -Comming soon +Snapshots are available at: -## Building +```xml + + flowingcode-snapshots + https://maven.flowingcode.com/snapshots + + true + + +``` -- git clone repository -- mvn clean install +For release versions, see Maven Central (coming soon). -## Release notes +## Documentation -See [here](https://github.com/FlowingCode/backend-core/releases) +Detailed design documentation and API reference are available via the Maven Site and in the source Markdown docs: -## Issue tracking +- [Maven Site](target/site/index.html) +- [Design documentation](src/site/markdown/index.md) -Issues for this project are tracked [here](https://github.com/FlowingCode/backend-core/issues). All bug reports and feature requests are appreciated. +## Release Notes -## Contributions +See the [GitHub releases](https://github.com/FlowingCode/backend-core/releases). -Contributions are welcome, but there are no guarantees that they are accepted as such. Process for contributing is the following: +## Issue Tracking -- Fork this project -- Create an issue to this project about the contribution (bug or feature) if there is no such issue about it already. Try to keep the scope minimal. -- Develop and test the fix or functionality carefully. Only include minimum amount of code needed to fix the issue. -- Refer to the fixed issue in commit -- Send a pull request for the original project -- Comment on the original issue that you have implemented a fix for it +Report bugs and request features on [GitHub Issues](https://github.com/FlowingCode/backend-core/issues). -## License & Author +## Contributing -Commons-Backend is distributed under Apache License 2.0. For license terms, see LICENSE.txt. +Contributions are welcome! Please follow the process outlined below: -Commons-Backend is written by Flowing Code +1. Fork this repository. +2. Create an issue for your contribution (bug or feature request), or select an existing one. +3. Develop and test your changes carefully; include only the minimum code required. +4. Reference the issue in your commit messages. +5. Send a pull request and comment on the issue once it's ready. -# Developer Guide +## License -Comming soon +Apache License 2.0. See [LICENSE.txt](LICENSE.txt). From 93fb78f6a05109f39fd5878ca35d25b927167287 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Thu, 22 May 2025 14:27:16 -0300 Subject: [PATCH 2/5] docs: add missing javadocs --- .../service/validation/CreationValidator.java | 6 ++++++ .../service/validation/DeletionValidator.java | 6 ++++++ .../service/validation/InvariantValidator.java | 6 ++++++ .../service/validation/ServiceValidationKind.java | 5 +++++ .../backendcore/service/validation/UpdateValidator.java | 6 ++++++ .../backendcore/service/ConstraintSpecification.java | 6 ++++++ .../dao/jpa/ConstraintTransformerJpaImpl.java | 5 +++++ .../backendcore/dao/jpa/ConversionJpaDaoSupport.java | 8 ++++++++ .../flowingcode/backendcore/dao/jpa/JpaDaoSupport.java | 7 +++++++ .../com/flowingcode/backendcore/dao/CreationDao.java | 7 +++++++ .../java/com/flowingcode/backendcore/dao/CrudDao.java | 9 ++++++++- .../com/flowingcode/backendcore/dao/DeletionDao.java | 6 ++++++ .../java/com/flowingcode/backendcore/dao/QueryDao.java | 7 +++++++ .../java/com/flowingcode/backendcore/dao/UpdateDao.java | 6 ++++++ .../com/flowingcode/backendcore/model/Constraint.java | 5 +++++ .../model/constraints/AttributeBetweenConstraint.java | 5 +++++ .../model/constraints/AttributeConstraint.java | 5 +++++ .../model/constraints/AttributeILikeConstraint.java | 5 +++++ .../model/constraints/AttributeInConstraint.java | 5 +++++ .../model/constraints/AttributeLikeConstraint.java | 5 +++++ .../model/constraints/AttributeNullConstraint.java | 5 +++++ .../model/constraints/AttributeRelationalConstraint.java | 5 +++++ .../backendcore/model/constraints/NegatedConstraint.java | 5 +++++ .../model/constraints/RelationalConstraint.java | 5 +++++ .../validation/CreationValidationException.java | 5 +++++ .../validation/DeletionValidationException.java | 5 +++++ .../validation/UpdateValidationException.java | 5 +++++ .../backendcore/validation/ValidationKind.java | 5 +++++ .../backendcore/validation/ValidationSupport.java | 6 ++++++ 29 files changed, 165 insertions(+), 1 deletion(-) diff --git a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/CreationValidator.java b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/CreationValidator.java index 66d3fb1..819b0e3 100644 --- a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/CreationValidator.java +++ b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/CreationValidator.java @@ -28,6 +28,12 @@ import com.flowingcode.backendcore.model.ErrorDescription; import com.flowingcode.backendcore.validation.Validator; +/** + * Validator for creation operations on entities. + * + * @param the type being validated + * @author mlopez + */ public interface CreationValidator extends Validator { default CreationValidator and(CreationValidator then) { diff --git a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/DeletionValidator.java b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/DeletionValidator.java index 804b663..0b17202 100644 --- a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/DeletionValidator.java +++ b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/DeletionValidator.java @@ -28,6 +28,12 @@ import com.flowingcode.backendcore.model.ErrorDescription; import com.flowingcode.backendcore.validation.Validator; +/** + * Validator for deletion operations on entities. + * + * @param the type being validated + * @author mlopez + */ public interface DeletionValidator extends Validator { default DeletionValidator and(DeletionValidator then) { diff --git a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/InvariantValidator.java b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/InvariantValidator.java index 26d7611..84dfce6 100644 --- a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/InvariantValidator.java +++ b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/InvariantValidator.java @@ -10,6 +10,12 @@ import com.flowingcode.backendcore.service.validation.UpdateValidator; import com.flowingcode.backendcore.validation.Validator; +/** + * Validator that enforces invariants during both creation and update operations. + * + * @param the type being validated + * @author jgodoy + */ public interface InvariantValidator extends CreationValidator, UpdateValidator { default InvariantValidator and(InvariantValidator then) { diff --git a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/ServiceValidationKind.java b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/ServiceValidationKind.java index 8662771..7f8c81a 100644 --- a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/ServiceValidationKind.java +++ b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/ServiceValidationKind.java @@ -6,6 +6,11 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; +/** + * Enumeration of service validation kinds corresponding to different operation types. + * + * @author mlopez + */ @RequiredArgsConstructor public enum ServiceValidationKind implements ValidationKind { diff --git a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/UpdateValidator.java b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/UpdateValidator.java index 9d092c1..7dd3f95 100644 --- a/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/UpdateValidator.java +++ b/backend-core-business-impl/src/main/java/com/flowingcode/backendcore/service/validation/UpdateValidator.java @@ -28,6 +28,12 @@ import com.flowingcode.backendcore.model.ErrorDescription; import com.flowingcode.backendcore.validation.Validator; +/** + * Validator for update operations on entities. + * + * @param the type being validated + * @author mlopez + */ public interface UpdateValidator extends Validator { default UpdateValidator and(UpdateValidator then) { diff --git a/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java b/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java index 46f2f62..ba9cb27 100644 --- a/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java +++ b/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java @@ -13,6 +13,12 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; +/** + * Spring Data JPA {@link org.springframework.data.jpa.domain.Specification} that applies a model {@link com.flowingcode.backendcore.model.Constraint}. + * + * @param the entity type + * @author jgodoy + */ @SuppressWarnings("serial") @RequiredArgsConstructor(access = AccessLevel.PRIVATE) final class ConstraintSpecification implements Specification { diff --git a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java index 52c1c8f..20a0458 100644 --- a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java +++ b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java @@ -44,6 +44,11 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; +/** + * JPA implementation of {@link com.flowingcode.backendcore.model.ConstraintTransformer} for converting model constraints into JPA {@link jakarta.persistence.criteria.Predicate} instances. + * + * @author jgodoy + */ @RequiredArgsConstructor public class ConstraintTransformerJpaImpl extends ConstraintTransformer { diff --git a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConversionJpaDaoSupport.java b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConversionJpaDaoSupport.java index a2ab5e4..c4dc47b 100644 --- a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConversionJpaDaoSupport.java +++ b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConversionJpaDaoSupport.java @@ -39,6 +39,14 @@ import com.flowingcode.backendcore.model.Identifiable; import com.flowingcode.backendcore.model.QuerySpec; +/** + * DAO support interface that converts between source domain type S and persistent entity type T and provides generic CRUD operations. + * + * @param the source domain type + * @param the persistent entity type + * @param the identifier type + * @author mlopez + */ public interface ConversionJpaDaoSupport, K extends Serializable> extends CrudDao { diff --git a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/JpaDaoSupport.java b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/JpaDaoSupport.java index 09dad06..bf7b1a5 100644 --- a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/JpaDaoSupport.java +++ b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/JpaDaoSupport.java @@ -23,6 +23,13 @@ import com.flowingcode.backendcore.model.Identifiable; +/** + * DAO support interface for JPA entities, providing default identity conversions. + * + * @param the persistent entity type + * @param the identifier type + * @author mlopez + */ public interface JpaDaoSupport, K extends Serializable> extends ConversionJpaDaoSupport { diff --git a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CreationDao.java b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CreationDao.java index a7d6613..7b634c2 100644 --- a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CreationDao.java +++ b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CreationDao.java @@ -19,6 +19,13 @@ */ package com.flowingcode.backendcore.dao; +/** + * Data access interface for creating entities of type T. + * + * @param the entity type + * @param the identifier type returned upon creation + * @author mlopez + */ public interface CreationDao { K save(T entity); diff --git a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CrudDao.java b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CrudDao.java index d49110e..1909496 100644 --- a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CrudDao.java +++ b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/CrudDao.java @@ -19,7 +19,14 @@ */ package com.flowingcode.backendcore.dao; +/** + * Generic CRUD data access interface combining create, retrieve, update, and delete operations. + * + * @param the entity type + * @param the identifier type + * @author mlopez + */ public interface CrudDao - extends CreationDao, UpdateDao, DeletionDao, QueryDao { + extends CreationDao, UpdateDao, DeletionDao, QueryDao { } diff --git a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/DeletionDao.java b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/DeletionDao.java index 52cbceb..566fb62 100644 --- a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/DeletionDao.java +++ b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/DeletionDao.java @@ -19,6 +19,12 @@ */ package com.flowingcode.backendcore.dao; +/** + * Data access interface for deleting entities of type T. + * + * @param the entity type + * @author mlopez + */ public interface DeletionDao { void delete(T entity); diff --git a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/QueryDao.java b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/QueryDao.java index 5801439..1fd5039 100644 --- a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/QueryDao.java +++ b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/QueryDao.java @@ -24,6 +24,13 @@ import com.flowingcode.backendcore.model.QuerySpec; +/** + * Data access interface for querying entities of type T identified by keys of type K. + * + * @param the entity type + * @param the identifier type + * @author mlopez + */ public interface QueryDao { Optional findById(K id); diff --git a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/UpdateDao.java b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/UpdateDao.java index c1cae9f..b7fc177 100644 --- a/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/UpdateDao.java +++ b/backend-core-data/src/main/java/com/flowingcode/backendcore/dao/UpdateDao.java @@ -19,6 +19,12 @@ */ package com.flowingcode.backendcore.dao; +/** + * Data access interface for updating entities of type T. + * + * @param the entity type + * @author mlopez + */ public interface UpdateDao { void update(T entity); diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/Constraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/Constraint.java index 337e2d1..ad72fed 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/Constraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/Constraint.java @@ -21,6 +21,11 @@ import com.flowingcode.backendcore.model.constraints.NegatedConstraint; +/** + * General constraint interface representing a filtering criterion for queries. + * + * @author jgodoy + */ public interface Constraint { default Constraint not() { diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeBetweenConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeBetweenConstraint.java index 5096e51..ed6f858 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeBetweenConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeBetweenConstraint.java @@ -26,6 +26,11 @@ import lombok.NonNull; import lombok.experimental.FieldDefaults; +/** + * Constraint that checks if an attribute's value falls between two inclusive bounds. + * + * @author jgodoy + */ @Getter @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) public class AttributeBetweenConstraint implements AttributeConstraint { diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java index a47378b..f330fe3 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java @@ -21,6 +21,11 @@ import com.flowingcode.backendcore.model.Constraint; +/** + * Marker interface for constraints applied to entity attributes. + * + * @author jgodoy + */ public interface AttributeConstraint extends Constraint { String getAttribute(); diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeILikeConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeILikeConstraint.java index ec2a1cd..cdcc4fd 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeILikeConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeILikeConstraint.java @@ -25,6 +25,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint that performs case-insensitive pattern matching (ILIKE) on an attribute. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeInConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeInConstraint.java index aed5f21..a572381 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeInConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeInConstraint.java @@ -27,6 +27,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint that checks if the specified attribute's value is contained within a given collection. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeLikeConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeLikeConstraint.java index a343c19..d0d2874 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeLikeConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeLikeConstraint.java @@ -25,6 +25,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint for SQL LIKE pattern matching on an attribute. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeNullConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeNullConstraint.java index 99b355d..504084d 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeNullConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeNullConstraint.java @@ -6,6 +6,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint indicating that the specified attribute's value must be null. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeRelationalConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeRelationalConstraint.java index da3292a..337b893 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeRelationalConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeRelationalConstraint.java @@ -25,6 +25,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint for relational comparison on an attribute using a comparison operator. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/NegatedConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/NegatedConstraint.java index 3630eda..c6f5e02 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/NegatedConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/NegatedConstraint.java @@ -27,6 +27,11 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +/** + * Constraint that negates another constraint. + * + * @author jgodoy + */ @Getter @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/RelationalConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/RelationalConstraint.java index 6663723..f8bee15 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/RelationalConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/RelationalConstraint.java @@ -21,6 +21,11 @@ import com.flowingcode.backendcore.model.Constraint; +/** + * Interface defining relational comparison operators for attribute constraints. + * + * @author jgodoy + */ public interface RelationalConstraint extends Constraint { String EQ = "="; diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/CreationValidationException.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/CreationValidationException.java index 8d45d1b..a97bbbe 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/CreationValidationException.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/CreationValidationException.java @@ -5,6 +5,11 @@ import com.flowingcode.backendcore.exception.BaseException; import com.flowingcode.backendcore.model.ErrorDescription; +/** + * Thrown to indicate validation failures during create operations. + * + * @author mlopez + */ @SuppressWarnings("serial") public class CreationValidationException extends ValidationException { diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/DeletionValidationException.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/DeletionValidationException.java index 7736b54..b70826f 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/DeletionValidationException.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/DeletionValidationException.java @@ -5,6 +5,11 @@ import com.flowingcode.backendcore.exception.BaseException; import com.flowingcode.backendcore.model.ErrorDescription; +/** + * Thrown to indicate validation failures during delete operations. + * + * @author mlopez + */ @SuppressWarnings("serial") public class DeletionValidationException extends ValidationException { diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/UpdateValidationException.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/UpdateValidationException.java index 1b8174f..8336e28 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/UpdateValidationException.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/UpdateValidationException.java @@ -5,6 +5,11 @@ import com.flowingcode.backendcore.exception.BaseException; import com.flowingcode.backendcore.model.ErrorDescription; +/** + * Thrown to indicate validation failures during update operations. + * + * @author mlopez + */ @SuppressWarnings("serial") public class UpdateValidationException extends ValidationException { diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationKind.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationKind.java index 4b96157..7f5e90c 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationKind.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationKind.java @@ -1,6 +1,11 @@ package com.flowingcode.backendcore.validation; +/** + * Defines the type of validator used for service validation steps. + * + * @author mlopez + */ public interface ValidationKind { @SuppressWarnings("rawtypes") diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationSupport.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationSupport.java index dcc6504..21deb1c 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationSupport.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/validation/ValidationSupport.java @@ -23,6 +23,12 @@ import java.util.List; import java.util.stream.Collectors; +/** + * Provides validation support utilities for collecting and executing validators on an object. + * + * @param the type under validation + * @author mlopez + */ public interface ValidationSupport { List> getValidators(); From e2a70a367a7265183de779bcb4d8b139359894d0 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Mon, 26 May 2025 14:34:46 -0300 Subject: [PATCH 3/5] docs: replace @link with @code --- .../backendcore/service/ConstraintSpecification.java | 3 ++- .../backendcore/dao/jpa/ConstraintTransformerJpaImpl.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java b/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java index ba9cb27..3362255 100644 --- a/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java +++ b/backend-core-business-spring-impl/src/main/java/com/flowingcode/backendcore/service/ConstraintSpecification.java @@ -14,7 +14,8 @@ import lombok.RequiredArgsConstructor; /** - * Spring Data JPA {@link org.springframework.data.jpa.domain.Specification} that applies a model {@link com.flowingcode.backendcore.model.Constraint}. + * Spring Data JPA {@code Specification} that applies a model + * {@code Constraint}. * * @param the entity type * @author jgodoy diff --git a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java index 20a0458..3a047fa 100644 --- a/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java +++ b/backend-core-data-impl/src/main/java/com/flowingcode/backendcore/dao/jpa/ConstraintTransformerJpaImpl.java @@ -45,7 +45,8 @@ import lombok.RequiredArgsConstructor; /** - * JPA implementation of {@link com.flowingcode.backendcore.model.ConstraintTransformer} for converting model constraints into JPA {@link jakarta.persistence.criteria.Predicate} instances. + * JPA implementation of {@code ConstraintTransformer} for converting + * model constraints into JPA {@code Predicate} instances. * * @author jgodoy */ From b3c2df70da7c73cc9b7271222dd392b17a5828c0 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Mon, 26 May 2025 14:36:01 -0300 Subject: [PATCH 4/5] docs: fix the javadoc with a better description of the interface --- .../backendcore/model/constraints/AttributeConstraint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java index f330fe3..b5508aa 100644 --- a/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java +++ b/backend-core-model/src/main/java/com/flowingcode/backendcore/model/constraints/AttributeConstraint.java @@ -22,7 +22,7 @@ import com.flowingcode.backendcore.model.Constraint; /** - * Marker interface for constraints applied to entity attributes. + * Specialization of {@code Constraint} that applies to entity attributes. * * @author jgodoy */ From ef89fc3e4152da83b9bb7d0db1d2054cb61060f8 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Mon, 26 May 2025 14:36:37 -0300 Subject: [PATCH 5/5] docs: improve the license section --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f564ac2..422c00c 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,8 @@ Contributions are welcome! Please follow the process outlined below: 4. Reference the issue in your commit messages. 5. Send a pull request and comment on the issue once it's ready. -## License +## License & Author -Apache License 2.0. See [LICENSE.txt](LICENSE.txt). +This library is distributed under Apache License 2.0. For license terms, see LICENSE.txt. + +Backend Core is written by Flowing Code S.A.