platform-core
platform-core es un conjunto de módulos Java/Spring Boot publicados como artefactos versionados que los
proyectos de dominio de EchoTechs consumen como dependencia. No se clona este repositorio — se agregan
las coordenadas Maven al build.gradle.kts (o pom.xml) del proyecto nuevo.
El objetivo es que un proyecto nuevo no vuelva a reimplementar autenticación, autorización multi-tenant, almacenamiento de archivos, máquina de estados, notificaciones ni reportes.
Coordenadas y publicación
Todos los módulos se publican bajo el grupo dev.echotechs.core en el Nexus interno:
| Grupo | dev.echotechs.core |
Versión actual en main | 0.1.0-SNAPSHOT |
| Repo de releases | https://nexus.lab.echotechs.net/repository/maven-releases |
| Repo de snapshots | https://nexus.lab.echotechs.net/repository/maven-snapshots |
El repositorio de destino se elige automáticamente según si la versión termina en -SNAPSHOT
(buildSrc/src/main/kotlin/echotechs.java-library-conventions.gradle.kts). La publicación depende de
check, así que un módulo cuyos tests fallan no llega a Nexus.
repositories {
mavenCentral()
maven {
url = uri("https://nexus.lab.echotechs.net/repository/maven-releases")
credentials {
username = System.getenv("NEXUS_USERNAME")
password = System.getenv("NEXUS_PASSWORD")
}
}
}
Los nueve módulos
| Módulo | Qué resuelve | Depende de |
|---|---|---|
core-persistence | Base JPA portable Postgres/Oracle: CoreEntity y el esquema core | — |
core-web | Errores uniformes, paginación, convención MapStruct | — |
core-auth | Identidad: JWT + refresh de usuario, client credentials, API keys, TenantContext | core-web, core-persistence |
core-authz | Autorización con OpenFGA: @RequiresPermission, tuplas | core-auth |
core-storage | Archivos en S3/MinIO con URLs prefirmadas | core-auth, core-authz, core-persistence |
core-workflow | Máquina de estados con auditoría y eventos | core-auth, core-persistence |
core-notifications | Envío de email con plantillas Thymeleaf | — |
core-reporting | PDF desde plantillas, subido vía core-storage | core-storage |
core-config | Catálogo de configuración editable en runtime | core-auth, core-authz, core-persistence |
Las dependencias se declaran como api(...), así que son transitivas: agregar core-storage arrastra
core-auth, core-authz y core-persistence automáticamente.
Stack fijado
Del gradle/libs.versions.toml y del convention plugin:
- Java 25 (toolchain), Spring Boot 4.1.0 sobre Spring Framework 7
- Gradle con Kotlin DSL y catálogo de versiones centralizado
- Jackson 3 (
tools.jackson.core:jackson-databind) — no Jackson 2; Spring Boot 4.1 autoconfigura elObjectMapperde Jackson 3 - Liquibase para migraciones, Hibernate/Spring Data JPA para acceso a datos
- OpenFGA SDK
0.9.9(crudo, no el starter — vercore-authz)
El wrapper de este repo necesita un JDK 21 como launcher y el JDK 25 sólo como toolchain. Todos los
workflows de CI y el Dockerfile del reference-app usan ese doble JDK:
./gradlew build --no-daemon -Porg.gradle.java.installations.paths="$JAVA_HOME_25_ARM64" -Porg.gradle.java.installations.auto-detect=false
Cómo leer esta documentación
Cada página de módulo documenta lo que el código hace hoy, con firmas extraídas del fuente y ejemplos
adaptados de los tests de integración reales de cada módulo. Donde el código diverge de
platform-core-spec.md, la diferencia está anotada al final de la página en Notas de implementación.
Dos páginas de referencia complementan eso:
- Paquetes frontend — estado real de
@echotechs/* - API pública sin documentar — clases públicas que no tienen Javadoc en el código fuente, para que el equipo las complete