Um contrato
Entidades, relacionamentos, endpoints e enums em JSON legível.
Backends consistentes. Menos repetição.
O Gonthera CLI transforma contratos JSON em estruturas completas para Java, .NET e Node.js — com CRUD, persistência, endpoints, autorização e mensageria.
$ mvn gonthera-cli:generate-sources
Entidades, relacionamentos, endpoints e enums em JSON legível.
Java + Spring, C# + .NET e TypeScript + Express + Prisma.
Código organizado, regenerável e pronto para especialização.
01 — Comece aqui
Crie o contrato, valide e gere. O diretório atual deve ser a raiz que contém a pasta .gonthera.
Para projetos Java, fixe a versão no pom.xml.
Separe as áreas do contrato dentro de .gonthera.
Validação não cria nem remove arquivos gerados.
02 — Fundação
O project.json identifica o serviço. Os arquivos separados sobrescrevem somente suas respectivas seções.
.gonthera/project.json e arquivos separadosproject.json na raizproperties.json legadoUse a linguagem em maiúsculas: JAVA, DOTNET ou NODE.
{{ property.name }}{{ property.required ? 'obrigatório' : 'opcional' }}{{ property.description }}
03 — Domínio
Cada entidade persistida precisa de exatamente uma chave primária e metadados completos.
JavaSuporte completo
Gera entidades JPA, DTOs, converters, repositories, services e controllers.
.NETSuporte completo
Gera entidades C#, DTOs, converters, repositories e controllers para Entity Framework Core.
Node.jsSuporte disponível
Gera models TypeScript, repositories, controllers, rotas e models Prisma para campos escalares.
04 — Modelo
O lado dono guarda a FK. O inverso aponta para ele com mappedBy.
bidirectional: falsereference: trueGera coluna, FK e @JoinColumn.
bidirectional: truelist: trueNão gera coluna adicional.
JavaSuporte completo
Relacionamentos JPA funcionam com lado dono, lado inverso, mappedBy, converters e geração de FK.
.NETSuporte completo
Relacionamentos são gerados para as entidades e o Entity Framework Core, incluindo suas referências e coleções.
Node.jsEm melhoria
Relações simples servem como base inicial. Autorrelacionamentos, relações bidirecionais e ManyToMany ainda precisam de revisão antes das migrations.
05 — HTTP
Complemente o CRUD com contratos de entrada, saída e autorização explícitos.
JavaSuporte completo
Gera interface, contratos de entrada e saída e aplica @Anonymous quando solicitado.
.NETSuporte completo
Agrupa métodos por grouper e aplica [AllowAnonymous] quando solicitado.
Node.jsSuporte disponível
Gera contratos TypeScript e rotas Express. A autorização integrada ainda depende da infraestrutura do consumidor.
06 — Segurança
A versão 2.1.0 entrega uma infraestrutura própria e pronta para customização no código Java gerado.
JavaSuporte completo
Gera autenticação JWT, permissões, annotations, configuração de tenant e contexto da requisição.
.NETEm melhoria
A geração ainda não oferece o mesmo conjunto próprio de autenticação, tenant e permissões disponível no Java.
Node.jsEm melhoria
A geração ainda não oferece o mesmo conjunto próprio de autenticação, tenant e permissões disponível no Java.
_gen/authorization/
Por padrão, os componentes são concretos. Ative os flags somente quando o consumidor fornecer beans concretos fora de _gen.
Adicione jjwt-api, jjwt-impl e jjwt-jackson ao consumidor.
O comportamento padrão lê uma chave HMAC dessa variável de ambiente.
Execute TenantContext.clear() em finally ao terminar a requisição.
resolveSecret()extractToken(header)parseClaims(token, secret)createUser(claims)validateUser(user)createToken(user, secret)07 — Saídas
O contrato é compartilhado, mas cada linguagem recebe uma arquitetura adequada ao seu runtime.
{{ lang.kicker }}
{{ lang.description }}
08 — Mensageria
Nenhuma classe ou dependência é gerada quando RabbitMq está ausente, nulo ou vazio.
JavaSuporte completo
Gera configuração Spring AMQP, publishers e subscribers. A exchange é definida com @RabbitExchange.
.NETSuporte completo
Gera configuração para DI, publishers, subscribers e o atributo [RabbitExchange].
Node.jsSuporte disponível
Gera configuração, publishers e subscribers TypeScript usando amqplib.
09 — Consultas
Os dialetos ainda não possuem paridade. Use somente as operações seguras de cada alvo.
eq, isNull, notNull, and, or e caminhos com ponto.Não misture and/or. Números, datas e booleanos não são seguros.eq e um único operador lógico por expressão.Coleções usam *. É um dialeto diferente do Java.size e offset.O filtro atual é ignorado pelo repository gerado.offset começa em 1 na requisição Java. displayFields controla a projeção do DTO, não filtra registros.
10 — Upgrade
Regere e compile o consumidor depois de concluir todos os passos.
Pronto para gerar?
Use o executável no Windows ou o JAR multiplataforma. Os dois artefatos correspondem à mesma versão.
{{ artifact.name }}{{ artifact.sha }}