nestcraftx 0.2.5 → 0.2.6
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/CLI_USAGE.fr.md +331 -331
- package/CLI_USAGE.md +364 -364
- package/LICENSE +21 -21
- package/bin/nestcraft.js +84 -64
- package/commands/demo.js +333 -330
- package/commands/generate.js +93 -0
- package/commands/generateConf.js +91 -0
- package/commands/info.js +48 -48
- package/commands/new.js +338 -335
- package/commands/start.js +19 -19
- package/commands/test.js +7 -7
- package/package.json +1 -1
- package/utils/cliParser.js +133 -76
- package/utils/colors.js +62 -62
- package/utils/configs/configureDocker.js +120 -120
- package/utils/configs/setupCleanArchitecture.js +15 -13
- package/utils/configs/setupLightArchitecture.js +15 -9
- package/utils/file-utils/saveProjectConfig.js +36 -0
- package/utils/fullModeInput.js +607 -607
- package/utils/generators/application/dtoUpdater.js +54 -0
- package/utils/generators/cleanModuleGenerator.js +475 -0
- package/utils/generators/database/setupDatabase.js +31 -0
- package/utils/generators/domain/entityUpdater.js +78 -0
- package/utils/generators/infrastructure/mapperUpdater.js +65 -0
- package/utils/generators/lightModuleGenerator.js +131 -0
- package/utils/generators/relation/relation.engine.js +64 -0
- package/utils/interactive/askEntityInputs.js +165 -0
- package/utils/loggers/logError.js +7 -7
- package/utils/loggers/logInfo.js +7 -7
- package/utils/loggers/logSuccess.js +7 -7
- package/utils/loggers/logWarning.js +7 -7
- package/utils/setups/orms/typeOrmSetup.js +630 -630
- package/utils/setups/setupAuth.js +28 -15
- package/utils/setups/setupDatabase.js +75 -75
- package/utils/setups/setupPrisma.js +802 -630
- package/utils/shell.js +32 -32
- package/utils/spinner.js +57 -57
- package/utils/systemCheck.js +124 -124
- package/utils/userInput.js +421 -421
- package/utils/utils.js +27 -27
package/commands/demo.js
CHANGED
|
@@ -1,330 +1,333 @@
|
|
|
1
|
-
const inquirer = require("inquirer");
|
|
2
|
-
const { logInfo } = require("../utils/loggers/logInfo");
|
|
3
|
-
const { logSuccess } = require("../utils/loggers/logSuccess");
|
|
4
|
-
const { createProject } = require("../utils/setups/projectSetup");
|
|
5
|
-
const {
|
|
6
|
-
setupCleanArchitecture,
|
|
7
|
-
} = require("../utils/configs/setupCleanArchitecture");
|
|
8
|
-
const {
|
|
9
|
-
setupLightArchitecture,
|
|
10
|
-
} = require("../utils/configs/setupLightArchitecture");
|
|
11
|
-
const { setupAuth } = require("../utils/setups/setupAuth");
|
|
12
|
-
const { setupSwagger } = require("../utils/setups/setupSwagger");
|
|
13
|
-
const { setupDatabase } = require("../utils/setups/setupDatabase");
|
|
14
|
-
const { configureDocker } = require("../utils/configs/configureDocker");
|
|
15
|
-
const { generateEnvFile, writeEnvFile } = require("../utils/envGenerator");
|
|
16
|
-
const { setupBootstrapLogger } = require("../utils/setups/setupLogger");
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
{ name: "
|
|
65
|
-
{ name: "
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
{ name: "
|
|
79
|
-
{ name: "
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
let
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
{ name: "
|
|
141
|
-
{ name: "
|
|
142
|
-
{ name: "
|
|
143
|
-
{ name: "
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{ name: "
|
|
151
|
-
{ name: "
|
|
152
|
-
{ name: "
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
{ name: "
|
|
160
|
-
{ name: "
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
{ from: "
|
|
167
|
-
{ from: "
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
{ name: "
|
|
178
|
-
{ name: "
|
|
179
|
-
{ name: "
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
console.log("
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
console.log(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
console.log(
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
);
|
|
275
|
-
console.log(
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
console.log("
|
|
279
|
-
console.log("
|
|
280
|
-
console.log("
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
console.log(`
|
|
287
|
-
console.log(`
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
);
|
|
294
|
-
console.log(
|
|
295
|
-
"
|
|
296
|
-
);
|
|
297
|
-
console.log(
|
|
298
|
-
"
|
|
299
|
-
);
|
|
300
|
-
console.log(
|
|
301
|
-
"
|
|
302
|
-
);
|
|
303
|
-
console.log(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
console.log("
|
|
322
|
-
console.log(
|
|
323
|
-
|
|
324
|
-
);
|
|
325
|
-
console.log(
|
|
326
|
-
"
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
1
|
+
const inquirer = require("inquirer");
|
|
2
|
+
const { logInfo } = require("../utils/loggers/logInfo");
|
|
3
|
+
const { logSuccess } = require("../utils/loggers/logSuccess");
|
|
4
|
+
const { createProject } = require("../utils/setups/projectSetup");
|
|
5
|
+
const {
|
|
6
|
+
setupCleanArchitecture,
|
|
7
|
+
} = require("../utils/configs/setupCleanArchitecture");
|
|
8
|
+
const {
|
|
9
|
+
setupLightArchitecture,
|
|
10
|
+
} = require("../utils/configs/setupLightArchitecture");
|
|
11
|
+
const { setupAuth } = require("../utils/setups/setupAuth");
|
|
12
|
+
const { setupSwagger } = require("../utils/setups/setupSwagger");
|
|
13
|
+
const { setupDatabase } = require("../utils/setups/setupDatabase");
|
|
14
|
+
const { configureDocker } = require("../utils/configs/configureDocker");
|
|
15
|
+
const { generateEnvFile, writeEnvFile } = require("../utils/envGenerator");
|
|
16
|
+
const { setupBootstrapLogger } = require("../utils/setups/setupLogger");
|
|
17
|
+
const { saveProjectConfig } = require("../utils/file-utils/saveProjectConfig");
|
|
18
|
+
const actualInquirer = inquirer.default || inquirer;
|
|
19
|
+
|
|
20
|
+
async function demoCommand(flags = {}) {
|
|
21
|
+
console.log("\n🎯 Generating demonstration project...\n");
|
|
22
|
+
logInfo('Configuring "blog-demo" project');
|
|
23
|
+
|
|
24
|
+
// Prépare les questions à poser uniquement si le flag n'est pas passé
|
|
25
|
+
const questions = [];
|
|
26
|
+
if (flags.light === undefined) {
|
|
27
|
+
questions.push({
|
|
28
|
+
type: "confirm",
|
|
29
|
+
name: "light",
|
|
30
|
+
message: "LIGHT Mode (Simplified MVP)?",
|
|
31
|
+
default: false,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (flags.docker === undefined) {
|
|
35
|
+
questions.push({
|
|
36
|
+
type: "confirm",
|
|
37
|
+
name: "docker",
|
|
38
|
+
message: "Enable Docker?",
|
|
39
|
+
default: true,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (flags.auth === undefined) {
|
|
43
|
+
questions.push({
|
|
44
|
+
type: "confirm",
|
|
45
|
+
name: "auth",
|
|
46
|
+
message: "Enable JWT Auth?",
|
|
47
|
+
default: true,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (flags.swagger === undefined) {
|
|
51
|
+
questions.push({
|
|
52
|
+
type: "confirm",
|
|
53
|
+
name: "swagger",
|
|
54
|
+
message: "Enable Swagger UI?",
|
|
55
|
+
default: true,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (flags.orm === undefined) {
|
|
59
|
+
questions.push({
|
|
60
|
+
type: "list",
|
|
61
|
+
name: "orm",
|
|
62
|
+
message: "Choose ORM / Database?",
|
|
63
|
+
choices: [
|
|
64
|
+
{ name: "Prisma (PostgreSQL)", value: "prisma" },
|
|
65
|
+
{ name: "TypeORM (PostgreSQL)", value: "typeorm" },
|
|
66
|
+
{ name: "Mongoose (MongoDB)", value: "mongoose" },
|
|
67
|
+
],
|
|
68
|
+
default: "prisma",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (flags.packageManager === undefined) {
|
|
73
|
+
questions.push({
|
|
74
|
+
type: "list",
|
|
75
|
+
name: "packageManager",
|
|
76
|
+
message: "Choose the package manager for the project?",
|
|
77
|
+
choices: [
|
|
78
|
+
{ name: "npm", value: "npm" },
|
|
79
|
+
{ name: "yarn", value: "yarn" },
|
|
80
|
+
{ name: "pnpm", value: "pnpm" },
|
|
81
|
+
],
|
|
82
|
+
default: "npm",
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Pose uniquement les questions nécessaires
|
|
87
|
+
const answers =
|
|
88
|
+
questions.length > 0 ? await actualInquirer.prompt(questions) : {};
|
|
89
|
+
|
|
90
|
+
// Fusionne les réponses interactives et les flags (flags prioritaire)
|
|
91
|
+
const options = { ...answers, ...flags };
|
|
92
|
+
const packageManager = options.packageManager || "npm";
|
|
93
|
+
const isLight = !!options.light;
|
|
94
|
+
const useDocker = !!options.docker;
|
|
95
|
+
const useAuth = !!options.auth;
|
|
96
|
+
const useSwagger = !!options.swagger;
|
|
97
|
+
const orm = options.orm || "prisma";
|
|
98
|
+
|
|
99
|
+
let selectedDB = "postgresql";
|
|
100
|
+
let dbConfig = {};
|
|
101
|
+
|
|
102
|
+
if (orm === "prisma") {
|
|
103
|
+
selectedDB = "postgresql";
|
|
104
|
+
dbConfig = {
|
|
105
|
+
orm: "prisma",
|
|
106
|
+
POSTGRES_USER: "postgres",
|
|
107
|
+
POSTGRES_PASSWORD: "postgres",
|
|
108
|
+
POSTGRES_DB: "blog_demo",
|
|
109
|
+
POSTGRES_HOST: "localhost",
|
|
110
|
+
POSTGRES_PORT: "5432",
|
|
111
|
+
};
|
|
112
|
+
} else if (orm === "typeorm") {
|
|
113
|
+
selectedDB = "postgresql";
|
|
114
|
+
dbConfig = {
|
|
115
|
+
orm: "typeorm",
|
|
116
|
+
POSTGRES_USER: "postgres",
|
|
117
|
+
POSTGRES_PASSWORD: "postgres",
|
|
118
|
+
POSTGRES_DB: "blog_demo",
|
|
119
|
+
POSTGRES_HOST: "localhost",
|
|
120
|
+
POSTGRES_PORT: "5432",
|
|
121
|
+
};
|
|
122
|
+
} else if (orm === "mongoose") {
|
|
123
|
+
selectedDB = "mongodb";
|
|
124
|
+
dbConfig = {
|
|
125
|
+
orm: "mongoose",
|
|
126
|
+
MONGO_URI: "mongodb://localhost:27017/blog_demo",
|
|
127
|
+
MONGO_DB: "blog_demo",
|
|
128
|
+
MONGO_HOST: "localhost",
|
|
129
|
+
MONGO_PORT: "27017",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let entitiesData = { entities: [], relations: [] };
|
|
134
|
+
|
|
135
|
+
entitiesData = {
|
|
136
|
+
entities: [
|
|
137
|
+
{
|
|
138
|
+
name: "user",
|
|
139
|
+
fields: [
|
|
140
|
+
{ name: "email", type: "string" },
|
|
141
|
+
{ name: "password", type: "string" },
|
|
142
|
+
{ name: "username", type: "string" },
|
|
143
|
+
{ name: "role", type: "Role" },
|
|
144
|
+
{ name: "isActive", type: "boolean" },
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "post",
|
|
149
|
+
fields: [
|
|
150
|
+
{ name: "title", type: "string" },
|
|
151
|
+
{ name: "content", type: "string" },
|
|
152
|
+
{ name: "published", type: "boolean" },
|
|
153
|
+
{ name: "userId", type: "string" },
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "comment",
|
|
158
|
+
fields: [
|
|
159
|
+
{ name: "content", type: "string" },
|
|
160
|
+
{ name: "postId", type: "string" },
|
|
161
|
+
{ name: "userId", type: "string" },
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
relations: [
|
|
166
|
+
{ from: "user", to: "post", type: "1-n" },
|
|
167
|
+
{ from: "post", to: "comment", type: "1-n" },
|
|
168
|
+
{ from: "user", to: "comment", type: "1-n" },
|
|
169
|
+
],
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
if (useAuth) {
|
|
173
|
+
// 1. Entité Session
|
|
174
|
+
entitiesData.entities.push({
|
|
175
|
+
name: "session",
|
|
176
|
+
fields: [
|
|
177
|
+
{ name: "refreshToken", type: "string" },
|
|
178
|
+
{ name: "userId", type: "string" },
|
|
179
|
+
{ name: "expiresAt", type: "Date" },
|
|
180
|
+
{ name: "createdAt", type: "Date", default: "now" },
|
|
181
|
+
],
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// 3. relation user & session
|
|
185
|
+
entitiesData.relations.push({
|
|
186
|
+
from: "user",
|
|
187
|
+
to: "session",
|
|
188
|
+
type: "1-n",
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const demoInputs = {
|
|
193
|
+
projectName: "blog-demo",
|
|
194
|
+
useDocker,
|
|
195
|
+
useAuth,
|
|
196
|
+
useSwagger,
|
|
197
|
+
swaggerInputs: {
|
|
198
|
+
title: "Blog Demo API",
|
|
199
|
+
description:
|
|
200
|
+
"Demonstration API created with NestCraftX - Blog management with users and posts",
|
|
201
|
+
version: "1.0.0",
|
|
202
|
+
endpoint: "api/docs",
|
|
203
|
+
},
|
|
204
|
+
packageManager: packageManager,
|
|
205
|
+
mode: isLight ? "light" : "full",
|
|
206
|
+
isDemo: true,
|
|
207
|
+
entitiesData: entitiesData,
|
|
208
|
+
selectedDB,
|
|
209
|
+
dbConfig,
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
await createProject(demoInputs);
|
|
213
|
+
|
|
214
|
+
if (isLight) {
|
|
215
|
+
await setupLightArchitecture(demoInputs);
|
|
216
|
+
} else {
|
|
217
|
+
await setupCleanArchitecture(demoInputs);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (useAuth) {
|
|
221
|
+
await setupAuth(demoInputs);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (useSwagger) {
|
|
225
|
+
await setupSwagger(demoInputs.swaggerInputs);
|
|
226
|
+
} else {
|
|
227
|
+
await setupBootstrapLogger();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (useDocker) {
|
|
231
|
+
await configureDocker(demoInputs);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
await setupDatabase(demoInputs);
|
|
235
|
+
|
|
236
|
+
const envContent = await generateEnvFile(demoInputs);
|
|
237
|
+
writeEnvFile(envContent);
|
|
238
|
+
|
|
239
|
+
await saveProjectConfig(demoInputs);
|
|
240
|
+
|
|
241
|
+
console.log("\n" + "=".repeat(60));
|
|
242
|
+
logSuccess("Demonstration project created successfully!");
|
|
243
|
+
console.log("=".repeat(60));
|
|
244
|
+
|
|
245
|
+
console.log('\nProject "blog-demo" configured with:');
|
|
246
|
+
console.log(" ✅ 3 Entities: User, Post, Comment");
|
|
247
|
+
console.log(" ✅ Entity Relationships");
|
|
248
|
+
if (useAuth) console.log(" ✅ Integrated JWT Auth");
|
|
249
|
+
if (useSwagger) console.log(" ✅ Swagger UI enabled");
|
|
250
|
+
if (useDocker) console.log(" ✅ Docker & Docker Compose");
|
|
251
|
+
console.log(
|
|
252
|
+
orm === "prisma"
|
|
253
|
+
? " ✅ Prisma ORM (PostgreSQL) configured"
|
|
254
|
+
: orm === "typeorm"
|
|
255
|
+
? " ✅ TypeORM (PostgreSQL) configured"
|
|
256
|
+
: " ✅ Mongoose (MongoDB) configured",
|
|
257
|
+
);
|
|
258
|
+
console.log(
|
|
259
|
+
isLight
|
|
260
|
+
? " ✅ LIGHT Structure (Simplified MVP)"
|
|
261
|
+
: " ✅ Complete Clean Architecture",
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
console.log("\n🚀 To get started:");
|
|
265
|
+
console.log(" 1- cd blog-demo");
|
|
266
|
+
|
|
267
|
+
// Instructions spécifiques selon le moteur choisi
|
|
268
|
+
const pm = demoInputs.packageManager;
|
|
269
|
+
const run = pm === "yarn" ? "" : "run "; // yarn n'a pas besoin de 'run'
|
|
270
|
+
if (orm === "prisma" || orm === "typeorm") {
|
|
271
|
+
console.log(
|
|
272
|
+
"\n 2- Create a PostgreSQL database with the name specified in the .env (default 'blog_demo').",
|
|
273
|
+
);
|
|
274
|
+
console.log(" Example (psql) : createdb blog_demo");
|
|
275
|
+
console.log(
|
|
276
|
+
"\n 3- Open the generated .env file and replace the values with your actual connection details:",
|
|
277
|
+
);
|
|
278
|
+
console.log(" POSTGRES_USER=<your_user>");
|
|
279
|
+
console.log(" POSTGRES_PASSWORD=<your_password>");
|
|
280
|
+
console.log(" POSTGRES_DB=blog_demo");
|
|
281
|
+
console.log(" POSTGRES_HOST=localhost");
|
|
282
|
+
console.log(" POSTGRES_PORT=5432");
|
|
283
|
+
console.log("\n 4- Run migrations and seeds:");
|
|
284
|
+
if (orm === "prisma") {
|
|
285
|
+
console.log(` npx prisma migrate reset`);
|
|
286
|
+
console.log(` npx prisma migrate dev`);
|
|
287
|
+
console.log(` npx prisma db seed`);
|
|
288
|
+
} else {
|
|
289
|
+
console.log(` ${pm} ${run}typeorm:migration:run`);
|
|
290
|
+
console.log(` ${pm} ${run}typeorm:seed`);
|
|
291
|
+
}
|
|
292
|
+
} else if (orm === "mongoose") {
|
|
293
|
+
console.log("\n 2- MongoDB: You can use either a local server or Docker.");
|
|
294
|
+
console.log(
|
|
295
|
+
" By default, the project uses: MONGO_URI=mongodb://localhost:27017/blog_demo",
|
|
296
|
+
);
|
|
297
|
+
console.log(
|
|
298
|
+
" The database will be created automatically upon first write operation.",
|
|
299
|
+
);
|
|
300
|
+
console.log(
|
|
301
|
+
"\n 3- Open the generated .env file and replace the MONGO_URI variable if necessary:",
|
|
302
|
+
);
|
|
303
|
+
console.log(
|
|
304
|
+
" MONGO_URI=mongodb://<user>:<password>@localhost:27017/blog_demo",
|
|
305
|
+
);
|
|
306
|
+
console.log("\n 4- Run the seed script (if present):");
|
|
307
|
+
console.log(` ${pm} ${run}seed`);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
console.log("\n 5- Run the project:");
|
|
311
|
+
console.log(` ${demoInputs.packageManager} run start:dev`);
|
|
312
|
+
if (useSwagger)
|
|
313
|
+
console.log(" 6- Open Swagger UI : http://localhost:3000/api/docs");
|
|
314
|
+
|
|
315
|
+
console.log("\n📚 Main Endpoints:");
|
|
316
|
+
if (useAuth) {
|
|
317
|
+
console.log(" • /auth/register → Create an account");
|
|
318
|
+
console.log(" • /auth/login → Log in");
|
|
319
|
+
}
|
|
320
|
+
console.log(" • /users → Manage users");
|
|
321
|
+
console.log(" • /posts → Manage posts");
|
|
322
|
+
console.log(" • /comments → Manage comments");
|
|
323
|
+
|
|
324
|
+
console.log("\n💡 Tip:");
|
|
325
|
+
console.log(
|
|
326
|
+
" Modify the .env file to connect your own database (Postgres or Mongo).",
|
|
327
|
+
);
|
|
328
|
+
console.log(
|
|
329
|
+
" Once configured and migrated/seeded, the project is ready to run immediately! 🚀\n",
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
module.exports = demoCommand;
|