Config New Module (Kotlin)
Overview
Padronizar a criação de novos módulos no projeto Kotlin multi-module Gradle com duas entregas sincronizadas:
- Sub-projeto em
packages/<module-name>combuild.gradle.kts, entidade de domínio placeholder, interface de repository e teste mínimo. - Módulo backend em
apps/backend/src/main/kotlin/<base-package>/modules/<module-name>com@RestController, JPA entity, Spring Data repository,@Configurationdo módulo e migration Flyway.
Executar o script Node da skill para receber o nome do módulo e gerar os arquivos mínimos de código e teste, sem depender de shell específico de SO.
Workflow
- Ler o nome do módulo solicitado pelo usuário.
- Executar
node scripts/create-module-kt.mjs <module-name>. - Namespace/grupo é resolvido por precedência:
--group>PROJECT_GROUP>skills.config.local.json>skills.config.json> fallbackcom.example. - Conferir a estrutura criada em:
packages/<module-name>/build.gradle.ktspackages/<module-name>/src/main/kotlin/<base-package>/<module>/domain/entity/*.ktpackages/<module-name>/src/main/kotlin/<base-package>/<module>/domain/repository/*.ktpackages/<module-name>/src/test/kotlin/<base-package>/<module>/**/*Test.ktapps/backend/src/main/kotlin/<base-package>/modules/<module>/*Controller.ktapps/backend/src/main/kotlin/<base-package>/modules/<module>/*JpaRepository.ktapps/backend/src/main/kotlin/<base-package>/modules/<module>/*JpaEntity.ktapps/backend/src/main/kotlin/<base-package>/modules/<module>/*Config.ktapps/backend/src/main/resources/db/migration/V*__create_<module>.sql
- Confirmar que o package contém API mínima e teste.
- Confirmar que o backend contém controller com endpoint GET de exemplo.
- Confirmar que
settings.gradle.ktsfoi atualizado cominclude("packages:<module-name>"). - Confirmar que
apps/backend/build.gradle.ktspossui dependênciaproject(":packages:<module-name>").
Commands
Criar módulo no grupo padrão do projeto:
node .agents/skills/config-new-module-kt/scripts/create-module-kt.mjs <module-name>
Definir grupo explícito:
node .agents/skills/config-new-module-kt/scripts/create-module-kt.mjs <module-name> --group com.acme
Sobrescrever diretório existente:
node .agents/skills/config-new-module-kt/scripts/create-module-kt.mjs <module-name> --force
Output Contract
O script deve gerar exatamente:
Package (packages/<module-name>)
build.gradle.kts(dependência em:packages:shared)src/main/kotlin/<base-package>/<module>/domain/entity/<Module>.kt(data class de domínio placeholder)src/main/kotlin/<base-package>/<module>/domain/repository/<Module>Repository.kt(interface de repository)src/test/kotlin/<base-package>/<module>/domain/entity/<Module>Test.kt(teste mínimo)
Backend (apps/backend)
src/main/kotlin/<base-package>/modules/<module>/<Module>Controller.kt(@RestControllercom GET)src/main/kotlin/<base-package>/modules/<module>/<Module>JpaEntity.kt(@EntityJPA)src/main/kotlin/<base-package>/modules/<module>/<Module>JpaRepository.kt(Spring DataJpaRepository)src/main/kotlin/<base-package>/modules/<module>/<Module>Config.kt(@Configuration+@ComponentScan)src/main/resources/db/migration/V<next>__create_<module>.sql(migration Flyway)- Atualização em
settings.gradle.ktscominclude("packages:<module-name>") - Atualização em
apps/backend/build.gradle.ktscomimplementation(project(":packages:<module-name>"))
Naming Convention
- Pastas: sempre minúsculas em kebab-case.
- Pacotes Kotlin: lowercase dot-separated derivado de
<group>.<module>. - Arquivos Kotlin: PascalCase com sufixo de tipo (
*Controller.kt,*JpaEntity.kt,*JpaRepository.kt,*Config.kt). - Convenção global:
../skills-standards.mdseção Kotlin.
Global Standards
- Consultar
../skills-standards.mdpara padrões globais de nomenclatura e convenções gerais entre skills.