gestao-cli
v1.0.4
Published
Esta CLI permite gerar módulos NestJS (Service, Resolver, DTOs, Entity) a partir do seu `schema.prisma`, facilitando o desenvolvimento de aplicações NestJS com Prisma.
Readme
CLI de Geração de Módulos NestJS
Esta CLI permite gerar módulos NestJS (Service, Resolver, DTOs, Entity) a partir do seu schema.prisma, facilitando o desenvolvimento de aplicações NestJS com Prisma.
Instalação (para desenvolvimento local)
Clone o repositório da CLI:
git clone https://github.com/andreghisleni/gestao.git # Se ainda não o fez cd gestao-cliInstale as dependências:
npm installCompile o projeto:
npx tsc
Uso
Usando com npx (recomendado para uso em vários projetos)
Para usar a CLI de forma similar ao shadcn/ui, você pode executá-la diretamente com npx (após a CLI ser publicada no npm). Isso significa que você não precisa instalá-la globalmente em cada projeto.
Se a CLI já estiver publicada no npm (por você ou por outra pessoa):
npx gestao-cli <comando>Por exemplo, para inicializar a configuração:
npx gestao-cli initE para gerar módulos:
npx gestao-cli generatePublicando a CLI no npm (para uso com npx)
Para que a CLI possa ser usada com npx, ela precisa ser publicada no registro público do npm (ou em um registro privado).
Certifique-se de que você tem uma conta npm e está logado:
npm loginCompile o projeto (se ainda não o fez):
npx tscPublique o pacote:
npm publishNota: O nome do pacote (
gestao-clinopackage.json) deve ser único no npm. Se já existir, você precisará renomeá-lo.
1. Inicializar a Configuração
Para configurar os caminhos do seu schema.prisma, diretório de saída dos módulos e arquivo de histórico, execute o comando init:
npx gestao-cli initEste comando criará um arquivo gestao-cli-config.json na raiz do projeto da CLI com as configurações padrão. Você pode editar este arquivo para ajustar os caminhos conforme necessário.
Exemplo de gestao-cli-config.json:
{
"schemaPath": "../gestao/apps/api/prisma/schema.prisma",
"outputPath": "../gestao/apps/api/src/modules",
"historyFile": "gestao-cli-history.json"
}
Além das chaves acima, você pode configurar opções relacionadas a policies que o gerador injeta nos `resolvers`.
Exemplo com as chaves adicionais adicionadas pelo comando `init`:
```json
{
"schemaPath": "../gestao/apps/api/prisma/schema.prisma",
"outputPath": "../gestao/apps/api/src/modules",
"historyFile": "gestao-cli-history.json",
"defaultPoliciesType": "both", // 'both' | 'app' | 'org' | 'none'
"policiesImportPathApp": "@/policies/check-policies-app",
"policiesImportPathOrg": "@/policies/check-policies-org"
}defaultPoliciesType: valor padrão usado pelogeneratequando não há configuração interativa. Valores possíveis:both,app,org,none.policiesImportPathApp/policiesImportPathOrg: caminhos de import para os decoratorsCheckPoliciesAppeCheckPoliciesOrg— ajuste conforme a estrutura do seu projeto.
Policies nos Resolvers (novo)
Ao executar npx gestao-cli generate, a CLI perguntará qual tipo de policies você quer aplicar aos resolvers (opções: app, org, nenhum).
Se você escolher app, o gerador irá adicionar este import no topo do arquivo do resolver:
import { CheckPoliciesApp } from "@/policies/check-policies-app";e irá injetar o decorator nos métodos principais do resolver (exceto @ResolveField):
@CheckPoliciesApp((a) => a.can("create", "user"))
@Mutation(() => User)
createUser(...) { ... }
@CheckPoliciesApp((a) => a.can("read", "user"))
@Query(() => [User])
findAll(...) { ... }Se você escolher org, o gerador fará o mesmo usando CheckPoliciesOrg e o policiesImportPathOrg configurado.
Observações:
- O decorator é aplicado aos métodos
create,findAll(read),findById(read),updateedelete. - Os
ResolveFieldpermanecem sem decorators, conforme comportamento esperado. - Para evitar a pergunta interativa, configure
defaultPoliciesTypenogestao-cli-config.json.
### 2. Gerar Módulos NestJS
Para gerar os módulos NestJS, execute o comando `generate`:
```bash
npx gestao-cli generateSe você não tiver um arquivo de configuração (gestao-cli-config.json), a CLI solicitará os caminhos necessários interativamente.
Após carregar o schema.prisma, a CLI listará todos os modelos disponíveis (tabelas) e permitirá que você selecione quais módulos deseja gerar. A CLI também filtrará os modelos que já foram gerados anteriormente (registrados no historyFile).
Para cada modelo selecionado, a CLI gerará os seguintes arquivos no diretório de saída especificado:
[nome-do-modelo].module.ts[nome-do-modelo].service.ts[nome-do-modelo].resolver.tsdto/create-[nome-do-modelo].input.tsdto/update-[nome-do-modelo].input.tsdto/filter-[nome-do-modelo].input.tsentities/[nome-do-modelo].entity.ts
Estrutura dos Módulos Gerados
Os módulos gerados incluem o CRUD básico (Create, Read, Update, Delete) e tratam as relações entre as tabelas, bem como campos enum e Json.
Próximos Passos
- Implementar a lógica para lidar com as relações entre as tabelas de forma mais avançada (inputs aninhados para criação/atualização).
- Adicionar mais opções de filtragem para os campos (e.g.,
_contains,_startsWith). - Melhorar a detecção de tipos para campos complexos.
Mudanças recentes (gerador)
- O gerador de entidades (
generateNestJSEntity) agora registra tiposenumusandoregisterEnumTypedo@nestjs/graphqle adiciona o decorator@Fieldapenas para campos que sãoenumno Prisma. - Não são mais adicionados decorators
@Fieldpara camposidnem para outros campos escalares; isso evita anotações desnecessárias e deixa o arquivo de entidade mais limpo. - Os arquivos de DTO e testes foram atualizados para refletir esse comportamento e a suíte de testes passa localmente.
Exemplo resultante de entidade (trecho):
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
import { PaymentIntegrationType } from '@prisma/client';
registerEnumType(PaymentIntegrationType, {
name: 'PaymentIntegrationType',
});
@ObjectType()
export class PaymentIntegration {
id: string;
name: string;
@Field(() => PaymentIntegrationType)
type: PaymentIntegrationType;
token?: string;
// ... outros campos
}Se quiser que eu adicione mais detalhes ou exemplos no README.md, me diga o que prefere.
