Config Shared Core (Kotlin)
Overview
Criar ou recriar o módulo shared em Kotlin como biblioteca pura (sem Spring) contendo as abstrações base para DDD/Clean Architecture: Entity, UseCase interface, VOs obrigatórios (com tryCreate/create usando Result) e TransactionManager.
Equivalente ao config-shared-core do stack TypeScript, adaptado para Kotlin.
Estrutura alvo
packages/shared/
├── build.gradle.kts
└── src/
├── main/kotlin/com/example/shared/
│ ├── domain/
│ │ ├── base/
│ │ │ └── Entity.kt
│ │ └── vo/
│ │ ├── Id.kt
│ │ ├── Name.kt
│ │ ├── Email.kt
│ │ └── HashPassword.kt
│ ├── application/
│ │ ├── UseCase.kt
│ │ └── dto/
│ │ └── PagedResult.kt
│ └── infrastructure/
│ └── TransactionManager.kt
└── test/kotlin/com/example/shared/
├── domain/
│ ├── base/
│ │ └── EntityTest.kt
│ └── vo/
│ ├── IdTest.kt
│ ├── NameTest.kt
│ ├── EmailTest.kt
│ └── HashPasswordTest.kt
└── application/
└── UseCaseContractTest.kt
Workflow
- Confirmar que
settings.gradle.ktsincluipackages:shared. - Criar
packages/shared/build.gradle.ktscomo biblioteca Kotlin pura. - Criar classe base de domínio (
Entity). - Criar VOs obrigatórios:
Id,Name,Email,HashPassword. - Criar interface
UseCase<IN, OUT>na camada de aplicação. - Criar
PagedResult<T>como DTO genérico de paginação. - Criar interface
TransactionManagerna camada de infraestrutura. - Criar testes unitários para todas as classes.
- Validar build:
./gradlew :packages:shared:test.
Artefatos obrigatórios
Classes base
Entity.kt— classe base comid,createdAt,updatedAt,deletedAt?,equals/hashCodeporid.UseCase.kt—interface UseCase<IN, OUT> { suspend fun execute(data: IN): Result<OUT> }.PagedResult.kt—data class PagedResult<T>(data: List<T>, meta: PaginationMeta)+PaginatedInput+PaginationMeta+ factoryPagedResult.of().TransactionManager.kt—interface TransactionManager { suspend fun <T> runInTransaction(block: suspend () -> T): T }.
VOs obrigatórios
Id.kt— geração UUID, factorytryCreate(value: String?), validação de formato.Name.kt— trim + validação de tamanho (1-255).Email.kt— lowercase + regex + getterslocal/domain.HashPassword.kt— validação de formato bcrypt ($2a$|$2b$|$2y$).
Testes obrigatórios
IdTest.kt,NameTest.kt,EmailTest.kt,HashPasswordTest.kt— sucesso, falha, normalização.EntityTest.kt— igualdade por id, timestamps.
build.gradle.kts do shared
plugins {
kotlin("jvm")
}
dependencies {
testImplementation(kotlin("test"))
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
tasks.test {
useJUnitPlatform()
}
Commands
Criar/recriar shared no namespace padrão:
node config-shared-core-kt/scripts/create-shared-kt.mjs
Se instalado como submódulo:
node .agents/skills/config-shared-core-kt/scripts/create-shared-kt.mjs
Definir namespace explícito:
node config-shared-core-kt/scripts/create-shared-kt.mjs --scope @myorg
Sobrescrever diretório existente:
node config-shared-core-kt/scripts/create-shared-kt.mjs --force
Criar e executar testes:
node config-shared-core-kt/scripts/create-shared-kt.mjs --force --run-tests
Resources
scripts/create-shared-kt.mjs: gerador determinístico.assets/shared-template-kt: template completo do módulo shared (código + testes + config).references/shared-template-contract-kt.md: contrato dos artefatos gerados.- Log local de execução:
.log/skills.log.
Regras
- Sem Spring no módulo shared (domínio puro).
- Sem JPA no módulo shared.
- Dependência mínima: apenas
kotlin-stdlibejunitpara testes. - VOs usam
@JvmInline value classpara tipos simples. - Construtor
private, factory nocompanion object.
References
Consultar references/shared-template-contract-kt.md para contrato detalhado dos artefatos.
Consultar ../skills-standards.md para convenção global de nomenclatura (seção Kotlin).
Global Standards
- Consultar
../skills-standards.mdpara padrões globais de nomenclatura e convenções gerais entre skills.