nestforge-generator 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,7 +23,7 @@ For the testing guide, CLI prompts, and complete checklist, see [`TESTING.md`](T
23
23
  - Interactive prompts using `@clack/prompts`;
24
24
  - TypeScript or JavaScript generation;
25
25
  - Prisma, TypeORM, Drizzle ORM, or no ORM;
26
- - PostgreSQL, MySQL, and SQLite;
26
+ - PostgreSQL, MySQL, SQLite, and MongoDB with Prisma;
27
27
  - JWT, Session/Cookies, OAuth-only, or no authentication;
28
28
  - optional Docker;
29
29
  - optional Swagger/OpenAPI;
@@ -61,9 +61,10 @@ Available with:
61
61
 
62
62
  - PostgreSQL;
63
63
  - MySQL;
64
- - SQLite.
64
+ - SQLite;
65
+ - MongoDB.
65
66
 
66
- The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources.
67
+ The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources. MongoDB projects use mapped `ObjectId` fields and `prisma db push` instead of Prisma Migrate.
67
68
 
68
69
  ### TypeORM
69
70
 
@@ -105,6 +106,8 @@ The Drizzle template includes:
105
106
 
106
107
  After generation, only the schema and driver for the selected database remain in the project.
107
108
 
109
+ > **MongoDB compatibility:** MongoDB generation is currently available only with Prisma. TypeORM provides basic MongoDB support, but it is not directly compatible with the relational architecture of NestForge's TypeORM template. Drizzle does not currently provide an official MongoDB dialect. Therefore, the CLI does not offer MongoDB when TypeORM or Drizzle is selected.
110
+
108
111
  ### No ORM
109
112
 
110
113
  The “None” option:
@@ -261,7 +264,7 @@ When requested, the CLI automatically creates `.env` from the already processed
261
264
  | Database: PostgreSQL | ✅ Implemented |
262
265
  | Database: MySQL | ✅ Implemented |
263
266
  | Database: SQLite | ✅ Implemented |
264
- | Database: MongoDB | Not implemented |
267
+ | Database: MongoDB | Implemented with Prisma |
265
268
  | Auth: JWT | ✅ Implemented |
266
269
  | Auth: Session/Cookies | ✅ Implemented |
267
270
  | Auth: OAuth-only | ✅ Implemented |
@@ -288,6 +291,8 @@ Coverage includes:
288
291
  - Prisma with PostgreSQL;
289
292
  - Prisma with MySQL;
290
293
  - Prisma with SQLite;
294
+ - Prisma with MongoDB and JWT;
295
+ - Prisma with MongoDB and Session/Cookies;
291
296
  - TypeORM with SQLite;
292
297
  - Drizzle with PostgreSQL;
293
298
  - Drizzle with MySQL;
@@ -316,7 +321,7 @@ The following combinations were validated with installation, build, unit tests,
316
321
  - TypeScript + Drizzle + SQLite + JWT;
317
322
  - TypeScript + Drizzle + SQLite + Session/Cookies.
318
323
 
319
- PostgreSQL and MySQL have automated generation, configuration, and unused-driver removal tests. Complete smoke tests for these databases still require local services or Docker.
324
+ PostgreSQL, MySQL, and MongoDB have automated generation and configuration tests. Complete smoke tests that connect to these databases still require local services or Docker; MongoDB must run as a replica set.
320
325
 
321
326
  ## Known limitations
322
327
 
@@ -384,7 +389,7 @@ The build:
384
389
 
385
390
  ## Next steps
386
391
 
387
- - MongoDB;
392
+ - expand MongoDB support beyond Prisma when a compatible ORM integration is available;
388
393
  - more complete project and package name validation;
389
394
  - expand the smoke-test matrix with real PostgreSQL and MySQL services;
390
395
  - reduce the known limitations in the earlier templates.
package/README.pt-BR.md CHANGED
@@ -23,7 +23,7 @@ Para o guia de testes, perguntas da CLI e checklist completo, consulte [`TESTING
23
23
  * Prompts interativos usando @clack/prompts;
24
24
  * geração em TypeScript ou JavaScript;
25
25
  * Prisma, TypeORM, Drizzle ORM ou nenhum ORM;
26
- * PostgreSQL, MySQL e SQLite;
26
+ * PostgreSQL, MySQL, SQLite e MongoDB com Prisma;
27
27
  * autenticação JWT, Session/Cookies, OAuth-only ou nenhuma;
28
28
  * Docker opcional;
29
29
  * Swagger/OpenAPI opcional;
@@ -61,9 +61,10 @@ Disponível com:
61
61
 
62
62
  * PostgreSQL;
63
63
  * MySQL;
64
- * SQLite.
64
+ * SQLite;
65
+ * MongoDB.
65
66
 
66
- A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider.
67
+ A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider. Projetos MongoDB usam campos `ObjectId` mapeados e `prisma db push` no lugar do Prisma Migrate.
67
68
 
68
69
  ### TypeORM
69
70
 
@@ -105,6 +106,8 @@ O template Drizzle inclui:
105
106
 
106
107
  Depois da geração, somente o schema e o driver do banco selecionado permanecem no projeto.
107
108
 
109
+ > **Compatibilidade com MongoDB:** a geração com MongoDB está disponível atualmente apenas com Prisma. O TypeORM oferece suporte básico a MongoDB, mas ele não é diretamente compatível com a arquitetura relacional do template TypeORM do NestForge. O Drizzle não oferece atualmente um dialeto oficial para MongoDB. Portanto, a CLI não disponibiliza MongoDB quando TypeORM ou Drizzle é selecionado.
110
+
108
111
  ### Sem ORM
109
112
 
110
113
  A opção “Nenhum”:
@@ -262,7 +265,7 @@ processado.
262
265
  | Banco: PostgreSQL | ✅ Implementado |
263
266
  | Banco: MySQL | ✅ Implementado |
264
267
  | Banco: SQLite | ✅ Implementado |
265
- | Banco: MongoDB | Não implementado |
268
+ | Banco: MongoDB | Com Prisma |
266
269
  | Auth: JWT | ✅ Implementada |
267
270
  | Auth: Session/Cookies | ✅ Implementada |
268
271
  | Auth: OAuth-only | ✅ Implementada |
@@ -287,6 +290,8 @@ A cobertura inclui:
287
290
  * Prisma com PostgreSQL;
288
291
  * Prisma com MySQL;
289
292
  * Prisma com SQLite;
293
+ * Prisma com MongoDB e JWT;
294
+ * Prisma com MongoDB e Session/Cookies;
290
295
  * TypeORM com SQLite;
291
296
  * Drizzle com PostgreSQL;
292
297
  * Drizzle com MySQL;
@@ -315,7 +320,7 @@ Foram validadas com instalação, build, testes unitários, migrations, seed e t
315
320
  * TypeScript + Drizzle + SQLite + JWT;
316
321
  * TypeScript + Drizzle + SQLite + Session/Cookies.
317
322
 
318
- PostgreSQL e MySQL possuem testes automatizados de geração, configuração e remoção dos drivers não utilizados. Smoke tests completos desses bancos ainda exigem serviços locais ou Docker.
323
+ PostgreSQL, MySQL e MongoDB possuem testes automatizados de geração e configuração. Smoke tests que conectam a esses bancos ainda exigem serviços locais ou Docker; o MongoDB deve funcionar como replica set.
319
324
 
320
325
  ## Limitações conhecidas
321
326
 
@@ -383,7 +388,7 @@ O build:
383
388
 
384
389
  ## Próximos itens
385
390
 
386
- * MongoDB;
391
+ * ampliar o suporte a MongoDB além do Prisma quando houver uma integração compatível com o ORM;
387
392
  * validação mais completa do nome do projeto e do pacote;
388
393
  * ampliação da matriz de smoke tests com PostgreSQL e MySQL reais;
389
394
  * redução das limitações conhecidas dos templates anteriores.
@@ -16,6 +16,11 @@ const DATABASE_CONFIG = {
16
16
  devUrl: 'file:./dev.db',
17
17
  testUrl: 'file:./test.db',
18
18
  },
19
+ mongodb: {
20
+ provider: 'mongodb',
21
+ devUrl: 'mongodb://localhost:27017/nestforge?replicaSet=rs0',
22
+ testUrl: 'mongodb://localhost:27017/nestforge_test?replicaSet=rs0',
23
+ },
19
24
  };
20
25
  export async function applyDatabaseConfig(targetDir, database) {
21
26
  const databaseChoice = database;
@@ -24,6 +29,10 @@ export async function applyDatabaseConfig(targetDir, database) {
24
29
  return;
25
30
  }
26
31
  await updateSchemaProvider(targetDir, config.provider);
32
+ if (databaseChoice === 'mongodb') {
33
+ await updateMongoSchema(targetDir);
34
+ await updateMongoScripts(targetDir);
35
+ }
27
36
  await updateDatabaseType(targetDir, '.env.example', databaseChoice);
28
37
  await updateDatabaseType(targetDir, '.env.test', databaseChoice);
29
38
  await updateDatabaseUrl(targetDir, '.env.example', config.devUrl);
@@ -56,4 +65,30 @@ async function updateDatabaseUrl(targetDir, fileName, url) {
56
65
  const updated = content.replace(/^DATABASE_URL=.*$/m, `DATABASE_URL="${url}"`);
57
66
  await fs.writeFile(filePath, updated, 'utf-8');
58
67
  }
68
+ async function updateMongoScripts(targetDir) {
69
+ const packageJsonPath = path.join(targetDir, 'package.json');
70
+ if (!(await fs.pathExists(packageJsonPath))) {
71
+ return;
72
+ }
73
+ const packageJson = await fs.readJson(packageJsonPath);
74
+ packageJson.scripts['prisma:push'] =
75
+ 'prisma db push';
76
+ packageJson.scripts['pretest:e2e'] =
77
+ 'dotenv -e .env.test -- npx prisma db push --skip-generate';
78
+ delete packageJson.scripts['prisma:migrate'];
79
+ delete packageJson.scripts['prisma:deploy'];
80
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
81
+ }
82
+ async function updateMongoSchema(targetDir) {
83
+ const schemaPath = path.join(targetDir, 'prisma', 'schema.prisma');
84
+ if (!(await fs.pathExists(schemaPath))) {
85
+ return;
86
+ }
87
+ const schema = await fs.readFile(schemaPath, 'utf8');
88
+ const updated = schema
89
+ .replaceAll('@id @default(uuid())', '@id @default(auto()) @map("_id") @db.ObjectId')
90
+ .replace(/id\s+String\s+@id\r?\n\s+sid String @unique/, 'id String @id @map("_id")\n sid String @unique')
91
+ .replace(/userId(\s+)String(?!\s+@db\.ObjectId)/g, 'userId$1String @db.ObjectId');
92
+ await fs.writeFile(schemaPath, updated, 'utf8');
93
+ }
59
94
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"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"}
package/dist/generator.js CHANGED
@@ -18,7 +18,7 @@ const IMPLEMENTED_ORMS = [
18
18
  'none',
19
19
  ];
20
20
  const IMPLEMENTED_LANGUAGES = ['typescript', 'javascript'];
21
- const IMPLEMENTED_DATABASES = ['postgres', 'mysql', 'sqlite'];
21
+ const IMPLEMENTED_DATABASES = ['postgres', 'mysql', 'sqlite', 'mongodb'];
22
22
  const IMPLEMENTED_AUTH_STRATEGIES = ['jwt', 'session', 'oauth', 'none'];
23
23
  async function resolveTemplatesRoot() {
24
24
  if (await fs.pathExists(PACKAGE_TEMPLATES_ROOT)) {
@@ -40,6 +40,9 @@ export async function generateProject(options) {
40
40
  if (orm !== 'none' && !IMPLEMENTED_DATABASES.includes(database)) {
41
41
  throw new Error(`The "${database}" database is not ready yet — currently implemented: ${IMPLEMENTED_DATABASES.join(', ')}. Contributions are welcome!`);
42
42
  }
43
+ if (database === 'mongodb' && orm !== 'prisma') {
44
+ throw new Error('MongoDB is currently available only with Prisma.');
45
+ }
43
46
  if (orm === 'none' && authStrategy !== 'none') {
44
47
  throw new Error('Projects without an ORM currently support only the "none" authentication strategy.');
45
48
  }
@@ -82,6 +85,9 @@ function buildEnabledFeatures(features, accessControl, database, authStrategy) {
82
85
  }
83
86
  enabled.add(`database:${database}`);
84
87
  enabled.add(`auth:${authStrategy}`);
88
+ if (['postgres', 'mysql', 'sqlite'].includes(database)) {
89
+ enabled.add('database:relational');
90
+ }
85
91
  if (authStrategy !== 'none') {
86
92
  enabled.add('auth:enabled');
87
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -39,7 +39,14 @@ async function main() {
39
39
  ...seedSteps,
40
40
  ]
41
41
  : [
42
- 'npx prisma migrate dev',
42
+ ...(options.database === 'mongodb'
43
+ ? [
44
+ 'npm run prisma:push',
45
+ ...(shouldRunSeed
46
+ ? ['npm run prisma:seed']
47
+ : []),
48
+ ]
49
+ : ['npx prisma migrate dev']),
43
50
  ];
44
51
  const steps = [
45
52
  `cd ${relativeDir}`,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,KAAK,UAAU,IAAI;IACf,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC;QACnE,MAAM,cAAc,GAAG;YACnB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC1C,CAAC,CAAC,OAAO,CAAC,QAAQ;gBAClB,CAAC,CAAC,IAAI;YACV,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtD;aACI,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,aAAa,GAAG;YAClB,KAAK;YACL,SAAS;SACZ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,aAAa;YAC3B,CAAC,CAAC,CAAC,cAAc,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,aAAa,GACf,OAAO,CAAC,GAAG,KAAK,MAAM;YAClB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;gBAC3B,CAAC,CAAC;oBACE,qEAAqE;oBACrE,uBAAuB;oBACvB,GAAG,SAAS;iBACf;gBACD,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;oBACvB,CAAC,CAAC;wBACE,0BAA0B;wBAC1B,yBAAyB;wBACzB,GAAG,SAAS;qBACf;oBACD,CAAC,CAAC;wBACE,wBAAwB;qBAC3B,CAAC;QAEd,MAAM,KAAK,GAAG;YACV,MAAM,WAAW,EAAE;YACnB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACtD,aAAa;YACb,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc;gBACrD,CAAC,CAAC,CAAC,wBAAwB,cAAc,EAAE,CAAC;gBAC5C,CAAC,CAAC,EAAE,CAAC;YACT,GAAG,aAAa;YAChB,mBAAmB;SACtB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QAErC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,WAAW,yBAAyB,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,KAAK,UAAU,IAAI;IACf,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC;QACnE,MAAM,cAAc,GAAG;YACnB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC1C,CAAC,CAAC,OAAO,CAAC,QAAQ;gBAClB,CAAC,CAAC,IAAI;YACV,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtD;aACI,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,aAAa,GAAG;YAClB,KAAK;YACL,SAAS;SACZ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,aAAa;YAC3B,CAAC,CAAC,CAAC,cAAc,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,aAAa,GACf,OAAO,CAAC,GAAG,KAAK,MAAM;YAClB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;gBAC3B,CAAC,CAAC;oBACE,qEAAqE;oBACrE,uBAAuB;oBACvB,GAAG,SAAS;iBACf;gBACD,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;oBACvB,CAAC,CAAC;wBACE,0BAA0B;wBAC1B,yBAAyB;wBACzB,GAAG,SAAS;qBACf;oBACD,CAAC,CAAC;wBACE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;4BAC9B,CAAC,CAAC;gCACE,qBAAqB;gCACrB,GAAG,CAAC,aAAa;oCACb,CAAC,CAAC,CAAC,qBAAqB,CAAC;oCACzB,CAAC,CAAC,EAAE,CAAC;6BACZ;4BACD,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;qBACpC,CAAC;QAEd,MAAM,KAAK,GAAG;YACV,MAAM,WAAW,EAAE;YACnB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACtD,aAAa;YACb,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc;gBACrD,CAAC,CAAC,CAAC,wBAAwB,cAAc,EAAE,CAAC;gBAC5C,CAAC,CAAC,EAAE,CAAC;YACT,GAAG,aAAa;YAChB,mBAAmB;SACtB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QAErC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,WAAW,yBAAyB,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
package/dist/prompts.js CHANGED
@@ -63,7 +63,9 @@ export async function runPrompts() {
63
63
  { value: 'postgres', label: 'PostgreSQL', hint: 'Recommended' },
64
64
  { value: 'mysql', label: 'MySQL' },
65
65
  { value: 'sqlite', label: 'SQLite' },
66
- { value: 'mongodb', label: 'MongoDB', hint: 'coming soon' },
66
+ ...(orm === 'prisma'
67
+ ? [{ value: 'mongodb', label: 'MongoDB' }]
68
+ : []),
67
69
  ],
68
70
  });
69
71
  handleCancel(databaseSelection);
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nestforge-generator",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Interactive CLI for generating a NestJS project from a NestForge starter template",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -40,6 +40,7 @@
40
40
  "postgresql",
41
41
  "mysql",
42
42
  "sqlite",
43
+ "mongodb",
43
44
  "docker",
44
45
  "swagger",
45
46
  "api",
@@ -25,6 +25,8 @@ NestForge is a NestJS starter designed to accelerate the beginning of serious ba
25
25
  - 🐳 **Docker** — complete environment with a single command
26
26
  - ⚙️ **CI/CD** — GitHub Actions (build, lint, test)
27
27
 
28
+ > **MongoDB compatibility:** MongoDB is not available in this template because Drizzle does not currently provide an official MongoDB dialect. MongoDB generation is currently available through the Prisma template.
29
+
28
30
  ## 🧱 Stack
29
31
 
30
32
  | Layer | Technology |
@@ -25,6 +25,8 @@ NestForge é um boilerplate de NestJS pensado para acelerar o início de projeto
25
25
  - 🐳 **Docker** — ambiente completo com um comando
26
26
  - ⚙️ **CI/CD** — GitHub Actions (build, lint, test)
27
27
 
28
+ > **Compatibilidade com MongoDB:** o MongoDB não está disponível neste template porque o Drizzle não oferece atualmente um dialeto oficial para MongoDB. A geração com MongoDB está disponível atualmente por meio do template Prisma.
29
+
28
30
  ## 🧱 Stack
29
31
 
30
32
  | Camada | Tecnologia |
@@ -64,6 +64,9 @@ jobs:
64
64
  # nestforge:feature:database:sqlite
65
65
  DATABASE_URL: file:./ci-dev.db
66
66
  # nestforge:feature:database:sqlite:end
67
+ # nestforge:feature:database:mongodb
68
+ DATABASE_URL: mongodb://localhost:27017/nestforge?replicaSet=rs0
69
+ # nestforge:feature:database:mongodb:end
67
70
  JWT_ACCESS_SECRET: ci-access-secret-0123456789
68
71
  JWT_REFRESH_SECRET: ci-refresh-secret-0123456789
69
72
 
@@ -77,14 +80,34 @@ jobs:
77
80
  node-version: 20
78
81
  cache: npm
79
82
 
83
+ # nestforge:feature:database:mongodb
84
+ - name: Start MongoDB replica set
85
+ run: |
86
+ docker run --detach --name nestforge-mongodb --publish 27017:27017 mongo:8 mongod --replSet rs0 --bind_ip_all
87
+ for attempt in {1..30}; do
88
+ if docker exec nestforge-mongodb mongosh --quiet --eval "try { rs.status().ok } catch (error) { rs.initiate({_id: 'rs0', members: [{_id: 0, host: 'localhost:27017'}]}).ok }" | grep -q 1; then
89
+ exit 0
90
+ fi
91
+ sleep 2
92
+ done
93
+ exit 1
94
+ # nestforge:feature:database:mongodb:end
95
+
80
96
  - name: Instalar dependências
81
97
  run: npm ci
82
98
 
83
99
  - name: Gerar Prisma Client
84
100
  run: npx prisma generate
85
101
 
102
+ # nestforge:feature:database:relational
86
103
  - name: Rodar migrations
87
104
  run: npx prisma migrate deploy
105
+ # nestforge:feature:database:relational:end
106
+
107
+ # nestforge:feature:database:mongodb
108
+ - name: Sincronizar schema do MongoDB
109
+ run: npx prisma db push
110
+ # nestforge:feature:database:mongodb:end
88
111
 
89
112
  - name: Lint
90
113
  run: npm run lint
@@ -106,4 +129,4 @@ jobs:
106
129
  # nestforge:feature:database:mysql:end
107
130
 
108
131
  - name: Testes e2e
109
- run: npm run test:e2e
132
+ run: npm run test:e2e
@@ -11,7 +11,7 @@ Request → main.ts (global pipes/filters/interceptors)
11
11
  → Guards (JwtAuthGuard → RolesGuard → PermissionsGuard)
12
12
  → Controller (validates through a Zod DTO, delegates to the service)
13
13
  → Service (business rules, calls Prisma)
14
- → Prisma → PostgreSQL
14
+ → Prisma → selected database
15
15
  → Response (passes through ClassSerializerInterceptor before becoming JSON)
16
16
  ```
17
17
 
@@ -38,6 +38,12 @@ Controllers never communicate with Prisma directly — they always go through th
38
38
 
39
39
  Prisma Client is effectively already a type-safe repository. Adding an abstraction layer on top merely to “follow the pattern” would add indirection without a real benefit in this project (there is no plan to replace the ORM). Services call `this.prisma.<model>` directly.
40
40
 
41
+ ### How does MongoDB differ from the relational databases?
42
+
43
+ MongoDB documents use `_id`. The generated Prisma schema maps model IDs to `_id`, uses native `ObjectId` values where IDs are generated by MongoDB, and marks relation scalar fields with `@db.ObjectId`. The session store keeps its externally supplied string ID mapped directly to `_id`.
44
+
45
+ MongoDB uses `prisma db push` instead of Prisma Migrate. A replica set is required for transactional and nested-write behavior, so the generated Docker Compose starts a single-node replica set. The database health indicator uses MongoDB's `ping` command instead of executing `SELECT 1`.
46
+
41
47
  ### Why are permissions a fixed map in code (`ROLE_PERMISSIONS`) instead of a database table?
42
48
 
43
49
  A fully dynamic permission system (`roles`, `permissions`, and `role_permissions` tables) is overkill for a starter — most projects created from it will have 3–5 fixed roles. Keeping the mapping in `src/common/constants/role-permissions.ts` makes it explicitly auditable: the entire permission array for every role is visible in one file. If the project grows enough to require permissions configurable at runtime (for example, an administrator creating custom roles through the UI), then migrating to database tables becomes worthwhile.
@@ -11,7 +11,7 @@ Request → main.ts (pipes/filters/interceptors globais)
11
11
  → Guards (JwtAuthGuard → RolesGuard → PermissionsGuard)
12
12
  → Controller (valida via DTO Zod, delega pro service)
13
13
  → Service (regra de negócio, chama o Prisma)
14
- → Prisma → PostgreSQL
14
+ → Prisma → banco selecionado
15
15
  → Response (passa pelo ClassSerializerInterceptor antes de virar JSON)
16
16
  ```
17
17
 
@@ -36,6 +36,12 @@ Controllers nunca falam com o Prisma diretamente — sempre passam pelo service.
36
36
  ### Por que Prisma sem uma camada de "repository" por cima?
37
37
  Prisma Client já é, na prática, um repository type-safe — adicionar uma camada de abstração em cima dele só pra "seguir o padrão" adicionaria indireção sem trazer benefício real neste projeto (não há plano de trocar de ORM). Os services chamam `this.prisma.<model>` diretamente.
38
38
 
39
+ ### Como o MongoDB difere dos bancos relacionais?
40
+
41
+ Documentos MongoDB usam `_id`. O schema Prisma gerado mapeia os IDs dos models para `_id`, usa valores nativos `ObjectId` quando os IDs são gerados pelo MongoDB e marca os campos escalares de relação com `@db.ObjectId`. O armazenamento de sessão mantém seu ID textual fornecido externamente mapeado diretamente para `_id`.
42
+
43
+ MongoDB usa `prisma db push` no lugar do Prisma Migrate. Um replica set é necessário para transações e escritas aninhadas, então o Docker Compose gerado inicia um replica set de nó único. O indicador de saúde usa o comando `ping` do MongoDB em vez de executar `SELECT 1`.
44
+
39
45
  ### Por que permissions são um mapa fixo em código (`ROLE_PERMISSIONS`) e não uma tabela no banco?
40
46
  Um sistema de permissions 100% dinâmico (tabelas `roles`, `permissions`, `role_permissions`) é overkill pra um boilerplate — a maioria dos projetos que nascem daqui vai ter 3-5 roles fixas. Manter o mapeamento em `src/common/constants/role-permissions.ts` deixa auditável de forma explícita: dá pra ver o array inteiro de permissões de cada role em um arquivo só. Se o seu projeto crescer a ponto de precisar de permissions configuráveis em runtime (ex.: um admin criando roles customizadas pela UI), aí sim vale migrar pra tabela.
41
47
 
@@ -17,7 +17,7 @@ NestForge is a NestJS starter designed to accelerate the beginning of serious ba
17
17
  - 🌐 **OAuth** — Google and GitHub, integrated with the selected token or session strategy
18
18
  - 👥 **RBAC** — Roles (Admin, Manager, User) and granular Permissions
19
19
  - 🛡️ **Security** — Helmet, CORS, Rate Limiting, validation, and serialization with Zod
20
- - 🗄️ **Database** — Prisma with PostgreSQL, MySQL, or SQLite
20
+ - 🗄️ **Database** — Prisma with PostgreSQL, MySQL, SQLite, or MongoDB
21
21
  - 📨 **Email** — queues with BullMQ + Redis, locally tested with Mailpit
22
22
  - 📄 **Automatic documentation** — Swagger
23
23
  - 🪵 **Structured logs** — Pino
@@ -31,7 +31,7 @@ NestForge is a NestJS starter designed to accelerate the beginning of serious ba
31
31
  |---|---|
32
32
  | Framework | NestJS + TypeScript |
33
33
  | ORM | Prisma |
34
- | Database | PostgreSQL, MySQL, or SQLite |
34
+ | Database | PostgreSQL, MySQL, SQLite, or MongoDB |
35
35
  | Cache / Queues | Redis + BullMQ |
36
36
  | Authentication | JWT, Session/Cookies, or OAuth with Passport |
37
37
  | Validation | Zod + nestjs-zod (schemas automatically become DTOs + Swagger) |
@@ -73,14 +73,19 @@ cp .env.example .env
73
73
  docker compose up
74
74
  ```
75
75
 
76
- This starts the API, PostgreSQL, Redis, and Mailpit (email interface at `http://localhost:8025`).
76
+ This starts the API, the selected database, Redis, and Mailpit (email interface at `http://localhost:8025`). MongoDB runs as a single-node replica set for transaction support.
77
77
 
78
78
  ### Running locally
79
79
 
80
80
  ```bash
81
81
  npm install
82
82
  cp .env.example .env
83
+ # nestforge:feature:database:relational
83
84
  npx prisma migrate dev
85
+ # nestforge:feature:database:relational:end
86
+ # nestforge:feature:database:mongodb
87
+ npm run prisma:push
88
+ # nestforge:feature:database:mongodb:end
84
89
  npx prisma db seed
85
90
  npm run start:dev
86
91
  ```
@@ -234,15 +239,14 @@ npm run test:e2e # integration tests (E2E)
234
239
  npm run test:cov # coverage
235
240
  ```
236
241
 
237
- E2E tests (`test/*.e2e-spec.ts`) start the real application (Nest + Prisma + Redis) and call its endpoints with `supertest`, using an isolated database (`.env.test`, the `nestforge_test` database — never the development database). Before running them for the first time:
242
+ E2E tests (`test/*.e2e-spec.ts`) start the real application (Nest + Prisma + Redis) and call its endpoints with `supertest`, using an isolated database (`.env.test`, the `nestforge_test` database — never the development database). Before running them for the first time, start the selected database and Redis:
238
243
 
239
244
  ```bash
240
- createdb nestforge_test # or: psql -U nestforge -c "CREATE DATABASE nestforge_test;"
241
- docker compose up -d postgres redis
245
+ docker compose up -d
242
246
  npm run test:e2e
243
247
  ```
244
248
 
245
- The `pretest:e2e` script automatically applies migrations to this database before every run. Each test cleans the tables before running (`test/utils/clean-database.ts`), so nothing needs to be reset manually between runs. Current coverage includes the complete authentication flow (registration, login, refresh, logout, duplicate email, invalid credentials) and user CRUD with RBAC (ADMIN can do everything, USER can read but cannot create, `/users/me`, and access without a token).
249
+ The `pretest:e2e` script automatically applies migrations for relational databases or pushes the Prisma schema for MongoDB before every run. Each test cleans the database before running (`test/utils/clean-database.ts`), so nothing needs to be reset manually between runs. Current coverage includes the complete authentication flow (registration, login, refresh, logout, duplicate email, invalid credentials) and user CRUD with RBAC (ADMIN can do everything, USER can read but cannot create, `/users/me`, and access without a token).
246
250
 
247
251
  Unit tests (`src/**/*.spec.ts`) run in isolation with Prisma and `ioredis` mocked (`vi.fn()` / `vi.mock()`), so they do not require a real database or Redis. Current coverage includes `AuthService` (registration/login), `UsersService` (complete CRUD + pagination + confirmation through `instanceToPlain` that `passwordHash` is not leaked during serialization), `RolesGuard` and `PermissionsGuard` (allowing/blocking, including multiple permissions required at the same time), and health indicators (`PrismaHealthIndicator`, `RedisHealthIndicator`).
248
252
 
@@ -17,7 +17,7 @@ NestForge é um boilerplate de NestJS pensado para acelerar o início de projeto
17
17
  - 🌐 **OAuth** — Google e GitHub, integrado à estratégia de token ou sessão escolhida
18
18
  - 👥 **RBAC** — Roles (Admin, Manager, User) e Permissions granulares
19
19
  - 🛡️ **Segurança** — Helmet, CORS, Rate Limiting, validação e serialização com Zod
20
- - 🗄️ **Banco de dados** — Prisma com PostgreSQL, MySQL ou SQLite
20
+ - 🗄️ **Banco de dados** — Prisma com PostgreSQL, MySQL, SQLite ou MongoDB
21
21
  - 📨 **E-mails** — filas com BullMQ + Redis, testado localmente com Mailpit
22
22
  - 📄 **Documentação automática** — Swagger
23
23
  - 🪵 **Logs estruturados** — Pino
@@ -31,7 +31,7 @@ NestForge é um boilerplate de NestJS pensado para acelerar o início de projeto
31
31
  |---|---|
32
32
  | Framework | NestJS + TypeScript |
33
33
  | ORM | Prisma |
34
- | Banco | PostgreSQL, MySQL ou SQLite |
34
+ | Banco | PostgreSQL, MySQL, SQLite ou MongoDB |
35
35
  | Cache / Filas | Redis + BullMQ |
36
36
  | Autenticação | JWT, Session/Cookies ou OAuth com Passport |
37
37
  | Validação | Zod + nestjs-zod (schemas viram DTO + Swagger automaticamente) |
@@ -73,14 +73,19 @@ cp .env.example .env
73
73
  docker compose up
74
74
  ```
75
75
 
76
- Isso sobe: API, PostgreSQL, Redis e Mailpit (interface de e-mail em `http://localhost:8025`).
76
+ Isso sobe a API, o banco selecionado, Redis e Mailpit (interface de e-mail em `http://localhost:8025`). O MongoDB funciona como replica set de nó único para permitir transações.
77
77
 
78
78
  ### Rodando localmente
79
79
 
80
80
  ```bash
81
81
  npm install
82
82
  cp .env.example .env
83
+ # nestforge:feature:database:relational
83
84
  npx prisma migrate dev
85
+ # nestforge:feature:database:relational:end
86
+ # nestforge:feature:database:mongodb
87
+ npm run prisma:push
88
+ # nestforge:feature:database:mongodb:end
84
89
  npx prisma db seed
85
90
  npm run start:dev
86
91
  ```
@@ -234,15 +239,14 @@ npm run test:e2e # integração (e2e)
234
239
  npm run test:cov # cobertura
235
240
  ```
236
241
 
237
- Os testes e2e (`test/*.e2e-spec.ts`) sobem a aplicação real (Nest + Prisma + Redis) e batem nos endpoints com `supertest`, usando um banco isolado (`.env.test`, banco `nestforge_test` — nunca o de desenvolvimento). Antes de rodar pela primeira vez:
242
+ Os testes e2e (`test/*.e2e-spec.ts`) sobem a aplicação real (Nest + Prisma + Redis) e batem nos endpoints com `supertest`, usando um banco isolado (`.env.test`, banco `nestforge_test` — nunca o de desenvolvimento). Antes de rodar pela primeira vez, inicie o banco selecionado e o Redis:
238
243
 
239
244
  ```bash
240
- createdb nestforge_test # ou: psql -U nestforge -c "CREATE DATABASE nestforge_test;"
241
- docker compose up -d postgres redis
245
+ docker compose up -d
242
246
  npm run test:e2e
243
247
  ```
244
248
 
245
- O script `pretest:e2e` aplica as migrations nesse banco automaticamente antes de cada rodada. Cada teste limpa as tabelas antes de rodar (`test/utils/clean-database.ts`), então não precisa zerar nada manualmente entre execuções. Hoje cobrem o fluxo de autenticação completo (registro, login, refresh, logout, e-mail duplicado, credenciais inválidas) e o CRUD de usuários com RBAC (ADMIN consegue tudo, USER lê mas não cria, `/users/me`, acesso sem token).
249
+ O script `pretest:e2e` aplica as migrations nos bancos relacionais ou envia o schema Prisma ao MongoDB antes de cada rodada. Cada teste limpa o banco antes de rodar (`test/utils/clean-database.ts`), então não precisa zerar nada manualmente entre execuções. Hoje cobrem o fluxo de autenticação completo (registro, login, refresh, logout, e-mail duplicado, credenciais inválidas) e o CRUD de usuários com RBAC (ADMIN consegue tudo, USER lê mas não cria, `/users/me`, acesso sem token).
246
250
 
247
251
  Os testes unitários (`src/**/*.spec.ts`) rodam isolados, com Prisma e `ioredis` mockados (`vi.fn()` / `vi.mock()`) — não precisam de banco nem Redis de verdade. Hoje cobrem: `AuthService` (registro/login), `UsersService` (CRUD completo + paginação + confirma que o `passwordHash` não vaza na serialização via `instanceToPlain`), `RolesGuard` e `PermissionsGuard` (liberação/bloqueio, inclusive com múltiplas permissões exigidas ao mesmo tempo) e os indicadores de saúde (`PrismaHealthIndicator`, `RedisHealthIndicator`).
248
252
 
@@ -41,7 +41,11 @@ This roadmap makes it clear what is ready and where contributions are possible.
41
41
 
42
42
  - [x] Prisma
43
43
  - [x] PostgreSQL
44
- - [x] Migrations
44
+ - [x] MySQL
45
+ - [x] SQLite
46
+ - [x] MongoDB
47
+ - [x] Migrations for relational databases
48
+ - [x] Schema synchronization with `prisma db push` for MongoDB
45
49
  - [x] Complete seed (roles, permissions, administrator user)
46
50
 
47
51
  ## Infrastructure
@@ -36,7 +36,11 @@ Este roadmap existe para deixar claro o que já está pronto e onde dá pra cont
36
36
  ## Banco de dados
37
37
  - [x] Prisma
38
38
  - [x] PostgreSQL
39
- - [x] Migrations
39
+ - [x] MySQL
40
+ - [x] SQLite
41
+ - [x] MongoDB
42
+ - [x] Migrations para bancos relacionais
43
+ - [x] Sincronização do schema com `prisma db push` para MongoDB
40
44
  - [x] Seed completo (roles, permissions, usuário admin)
41
45
 
42
46
  ## Infra