nestjs-ddd-cli 2.0.0 → 2.0.1
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 +51 -20
- package/dist/commands/generate-event.d.ts +1 -0
- package/dist/commands/generate-event.js +58 -0
- package/dist/commands/generate-event.js.map +1 -0
- package/dist/commands/generate-module.js +1 -1
- package/dist/commands/generate-module.js.map +1 -1
- package/dist/commands/generate-query.d.ts +1 -0
- package/dist/commands/generate-query.js +58 -0
- package/dist/commands/generate-query.js.map +1 -0
- package/dist/commands/generate-service.d.ts +1 -0
- package/dist/commands/generate-service.js +58 -0
- package/dist/commands/generate-service.js.map +1 -0
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/templates/event/domain-event.hbs +9 -0
- package/dist/templates/query/query-handler.hbs +18 -0
- package/dist/templates/service/domain-service.hbs +13 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,15 +4,15 @@ A CLI tool for generating NestJS boilerplate code following pragmatic DDD/CQRS p
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
+
**From NPM (Recommended):**
|
|
7
8
|
```bash
|
|
8
|
-
|
|
9
|
-
chmod +x install.sh
|
|
10
|
-
./install.sh
|
|
9
|
+
npm install -g nestjs-ddd-cli
|
|
11
10
|
```
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
**From Source:**
|
|
15
13
|
```bash
|
|
14
|
+
git clone https://github.com/eshe-huli/nestjs-ddd-cli
|
|
15
|
+
cd nestjs-ddd-cli
|
|
16
16
|
npm install
|
|
17
17
|
npm run build
|
|
18
18
|
npm link
|
|
@@ -40,6 +40,15 @@ ddd generate entity User -m user-management
|
|
|
40
40
|
# Generate a use case
|
|
41
41
|
ddd generate usecase CreateUser -m user-management
|
|
42
42
|
|
|
43
|
+
# Generate a domain service
|
|
44
|
+
ddd generate service UserValidation -m user-management
|
|
45
|
+
|
|
46
|
+
# Generate a domain event
|
|
47
|
+
ddd generate event UserCreated -m user-management
|
|
48
|
+
|
|
49
|
+
# Generate a query handler
|
|
50
|
+
ddd generate query GetUser -m user-management
|
|
51
|
+
|
|
43
52
|
# Generate everything for an entity within existing module
|
|
44
53
|
ddd generate all User -m user-management
|
|
45
54
|
```
|
|
@@ -54,28 +63,41 @@ ddd generate all User -m user-management
|
|
|
54
63
|
- `--with-events`: Include domain events
|
|
55
64
|
- `--with-queries`: Include query handlers
|
|
56
65
|
|
|
66
|
+
## Available Generators
|
|
67
|
+
|
|
68
|
+
| Generator | Command | Description |
|
|
69
|
+
|-----------|---------|-------------|
|
|
70
|
+
| **Module** | `ddd generate module <name>` | Creates complete DDD module structure |
|
|
71
|
+
| **Entity** | `ddd generate entity <name> -m <module>` | Domain entity with ORM mapping |
|
|
72
|
+
| **Use Case** | `ddd generate usecase <name> -m <module>` | CQRS command handler |
|
|
73
|
+
| **Domain Service** | `ddd generate service <name> -m <module>` | Domain service for business logic |
|
|
74
|
+
| **Domain Event** | `ddd generate event <name> -m <module>` | Domain event for CQRS |
|
|
75
|
+
| **Query Handler** | `ddd generate query <name> -m <module>` | CQRS query handler |
|
|
76
|
+
| **Complete CRUD** | `ddd scaffold <name> -m <module>` | All files for an entity |
|
|
77
|
+
| **All Entity Files** | `ddd generate all <name> -m <module>` | Entity + related files |
|
|
78
|
+
|
|
57
79
|
## Generated Structure
|
|
58
80
|
|
|
59
81
|
```
|
|
60
82
|
modules/
|
|
61
83
|
└── [module-name]/
|
|
62
84
|
├── application/
|
|
63
|
-
│ ├── commands/
|
|
64
|
-
│ ├── controllers/
|
|
85
|
+
│ ├── commands/ # CQRS command handlers
|
|
86
|
+
│ ├── controllers/ # REST controllers
|
|
65
87
|
│ ├── domain/
|
|
66
|
-
│ │ ├── entities/
|
|
67
|
-
│ │ ├── events/
|
|
68
|
-
│ │ ├── services/
|
|
69
|
-
│ │ └── usecases/
|
|
88
|
+
│ │ ├── entities/ # Domain entities
|
|
89
|
+
│ │ ├── events/ # Domain events
|
|
90
|
+
│ │ ├── services/ # Domain services
|
|
91
|
+
│ │ └── usecases/ # Use cases/command handlers
|
|
70
92
|
│ ├── dto/
|
|
71
|
-
│ │ ├── requests/
|
|
72
|
-
│ │ └── responses/
|
|
73
|
-
│ └── queries/
|
|
93
|
+
│ │ ├── requests/ # Request DTOs
|
|
94
|
+
│ │ └── responses/ # Response DTOs
|
|
95
|
+
│ └── queries/ # CQRS query handlers
|
|
74
96
|
├── infrastructure/
|
|
75
|
-
│ ├── mappers/
|
|
76
|
-
│ ├── orm-entities/
|
|
77
|
-
│ └── repositories/
|
|
78
|
-
└── [module-name].module.ts
|
|
97
|
+
│ ├── mappers/ # Domain ↔ ORM mappers
|
|
98
|
+
│ ├── orm-entities/ # Database entities
|
|
99
|
+
│ └── repositories/ # Repository implementations
|
|
100
|
+
└── [module-name].module.ts # NestJS module
|
|
79
101
|
```
|
|
80
102
|
|
|
81
103
|
## Examples
|
|
@@ -99,11 +121,20 @@ ddd scaffold Policy -m policies
|
|
|
99
121
|
ddd generate all Coverage -m policies
|
|
100
122
|
```
|
|
101
123
|
|
|
102
|
-
### Add
|
|
124
|
+
### Add individual DDD components
|
|
103
125
|
|
|
104
126
|
```bash
|
|
105
|
-
# Generate a new use case
|
|
127
|
+
# Generate a new use case
|
|
106
128
|
ddd generate usecase ApproveCoverage -m policies
|
|
129
|
+
|
|
130
|
+
# Generate a domain service for business logic
|
|
131
|
+
ddd generate service PolicyValidation -m policies
|
|
132
|
+
|
|
133
|
+
# Generate a domain event
|
|
134
|
+
ddd generate event PolicyApproved -m policies
|
|
135
|
+
|
|
136
|
+
# Generate a query handler
|
|
137
|
+
ddd generate query GetPolicyDetails -m policies
|
|
107
138
|
```
|
|
108
139
|
|
|
109
140
|
## Philosophy
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateEvent(eventName: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateEvent = generateEvent;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const file_utils_1 = require("../utils/file.utils");
|
|
43
|
+
const naming_utils_1 = require("../utils/naming.utils");
|
|
44
|
+
async function generateEvent(eventName, options) {
|
|
45
|
+
if (!options.module) {
|
|
46
|
+
throw new Error('Module name is required. Use -m option to specify the module.');
|
|
47
|
+
}
|
|
48
|
+
console.log(chalk_1.default.blue(`Generating domain event: ${eventName}`));
|
|
49
|
+
const basePath = options.path || process.cwd();
|
|
50
|
+
const modulePath = (0, file_utils_1.getModulePath)(basePath, options.module);
|
|
51
|
+
// Generate domain event
|
|
52
|
+
const templateData = (0, file_utils_1.prepareTemplateData)(eventName, options.module);
|
|
53
|
+
const templatePath = path.join(__dirname, '../templates/event/domain-event.hbs');
|
|
54
|
+
const outputPath = path.join(modulePath, 'application/domain/events', `${(0, naming_utils_1.toKebabCase)(eventName)}.event.ts`);
|
|
55
|
+
await (0, file_utils_1.generateFromTemplate)(templatePath, outputPath, templateData);
|
|
56
|
+
console.log(chalk_1.default.green(`✅ Domain event ${eventName} generated successfully!`));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=generate-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-event.js","sourceRoot":"","sources":["../../src/commands/generate-event.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAsBC;AA3BD,2CAA6B;AAC7B,kDAA0B;AAC1B,oDAA+F;AAC/F,wDAAoD;AAE7C,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAY;IACjE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,wBAAwB;IACxB,MAAM,YAAY,GAAG,IAAA,gCAAmB,EAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,UAAU,EACV,2BAA2B,EAC3B,GAAG,IAAA,0BAAW,EAAC,SAAS,CAAC,WAAW,CACrC,CAAC;IAEF,MAAM,IAAA,iCAAoB,EAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,SAAS,0BAA0B,CAAC,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -101,7 +101,7 @@ function getArrayNameFromPath(indexPath) {
|
|
|
101
101
|
'orm-entities': 'OrmEntities',
|
|
102
102
|
'repositories': 'Repositories',
|
|
103
103
|
};
|
|
104
|
-
return mapping[lastPart] || 'Exports';
|
|
104
|
+
return (lastPart && mapping[lastPart]) || 'Exports';
|
|
105
105
|
}
|
|
106
106
|
async function generateIndexFile(filePath, arrayName) {
|
|
107
107
|
const content = `export const ${arrayName} = [];\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-module.js","sourceRoot":"","sources":["../../src/commands/generate-module.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-module.js","sourceRoot":"","sources":["../../src/commands/generate-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateQuery(queryName: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateQuery = generateQuery;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const file_utils_1 = require("../utils/file.utils");
|
|
43
|
+
const naming_utils_1 = require("../utils/naming.utils");
|
|
44
|
+
async function generateQuery(queryName, options) {
|
|
45
|
+
if (!options.module) {
|
|
46
|
+
throw new Error('Module name is required. Use -m option to specify the module.');
|
|
47
|
+
}
|
|
48
|
+
console.log(chalk_1.default.blue(`Generating query handler: ${queryName}`));
|
|
49
|
+
const basePath = options.path || process.cwd();
|
|
50
|
+
const modulePath = (0, file_utils_1.getModulePath)(basePath, options.module);
|
|
51
|
+
// Generate query handler
|
|
52
|
+
const templateData = (0, file_utils_1.prepareTemplateData)(queryName, options.module);
|
|
53
|
+
const templatePath = path.join(__dirname, '../templates/query/query-handler.hbs');
|
|
54
|
+
const outputPath = path.join(modulePath, 'application/queries', `${(0, naming_utils_1.toKebabCase)(queryName)}.handler.ts`);
|
|
55
|
+
await (0, file_utils_1.generateFromTemplate)(templatePath, outputPath, templateData);
|
|
56
|
+
console.log(chalk_1.default.green(`✅ Query handler ${queryName} generated successfully!`));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=generate-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-query.js","sourceRoot":"","sources":["../../src/commands/generate-query.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAsBC;AA3BD,2CAA6B;AAC7B,kDAA0B;AAC1B,oDAA+F;AAC/F,wDAAoD;AAE7C,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAY;IACjE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,YAAY,GAAG,IAAA,gCAAmB,EAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,UAAU,EACV,qBAAqB,EACrB,GAAG,IAAA,0BAAW,EAAC,SAAS,CAAC,aAAa,CACvC,CAAC;IAEF,MAAM,IAAA,iCAAoB,EAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,SAAS,0BAA0B,CAAC,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateService(serviceName: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateService = generateService;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const file_utils_1 = require("../utils/file.utils");
|
|
43
|
+
const naming_utils_1 = require("../utils/naming.utils");
|
|
44
|
+
async function generateService(serviceName, options) {
|
|
45
|
+
if (!options.module) {
|
|
46
|
+
throw new Error('Module name is required. Use -m option to specify the module.');
|
|
47
|
+
}
|
|
48
|
+
console.log(chalk_1.default.blue(`Generating domain service: ${serviceName}`));
|
|
49
|
+
const basePath = options.path || process.cwd();
|
|
50
|
+
const modulePath = (0, file_utils_1.getModulePath)(basePath, options.module);
|
|
51
|
+
// Generate domain service
|
|
52
|
+
const templateData = (0, file_utils_1.prepareTemplateData)(serviceName, options.module);
|
|
53
|
+
const templatePath = path.join(__dirname, '../templates/service/domain-service.hbs');
|
|
54
|
+
const outputPath = path.join(modulePath, 'application/domain/services', `${(0, naming_utils_1.toKebabCase)(serviceName)}.service.ts`);
|
|
55
|
+
await (0, file_utils_1.generateFromTemplate)(templatePath, outputPath, templateData);
|
|
56
|
+
console.log(chalk_1.default.green(`✅ Domain service ${serviceName} generated successfully!`));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=generate-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-service.js","sourceRoot":"","sources":["../../src/commands/generate-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0CAsBC;AA3BD,2CAA6B;AAC7B,kDAA0B;AAC1B,oDAA+F;AAC/F,wDAAoD;AAE7C,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,OAAY;IACrE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAA,gCAAmB,EAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,UAAU,EACV,6BAA6B,EAC7B,GAAG,IAAA,0BAAW,EAAC,WAAW,CAAC,aAAa,CACzC,CAAC;IAEF,MAAM,IAAA,iCAAoB,EAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,WAAW,0BAA0B,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,9 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
9
9
|
const generate_module_1 = require("./commands/generate-module");
|
|
10
10
|
const generate_entity_1 = require("./commands/generate-entity");
|
|
11
11
|
const generate_usecase_1 = require("./commands/generate-usecase");
|
|
12
|
+
const generate_service_1 = require("./commands/generate-service");
|
|
13
|
+
const generate_event_1 = require("./commands/generate-event");
|
|
14
|
+
const generate_query_1 = require("./commands/generate-query");
|
|
12
15
|
const generate_all_1 = require("./commands/generate-all");
|
|
13
16
|
const program = new commander_1.Command();
|
|
14
17
|
program
|
|
@@ -18,7 +21,7 @@ program
|
|
|
18
21
|
program
|
|
19
22
|
.command('generate <type> <name>')
|
|
20
23
|
.alias('g')
|
|
21
|
-
.description('Generate boilerplate code')
|
|
24
|
+
.description('Generate boilerplate code (types: module, entity, usecase, service, event, query, all)')
|
|
22
25
|
.option('-m, --module <module>', 'Module name')
|
|
23
26
|
.option('-p, --path <path>', 'Base path for generation', process.cwd())
|
|
24
27
|
.option('--skip-orm', 'Skip ORM entity generation')
|
|
@@ -39,12 +42,21 @@ program
|
|
|
39
42
|
case 'use-case':
|
|
40
43
|
await (0, generate_usecase_1.generateUseCase)(name, options);
|
|
41
44
|
break;
|
|
45
|
+
case 'service':
|
|
46
|
+
await (0, generate_service_1.generateService)(name, options);
|
|
47
|
+
break;
|
|
48
|
+
case 'event':
|
|
49
|
+
await (0, generate_event_1.generateEvent)(name, options);
|
|
50
|
+
break;
|
|
51
|
+
case 'query':
|
|
52
|
+
await (0, generate_query_1.generateQuery)(name, options);
|
|
53
|
+
break;
|
|
42
54
|
case 'all':
|
|
43
55
|
await (0, generate_all_1.generateAll)(name, options);
|
|
44
56
|
break;
|
|
45
57
|
default:
|
|
46
58
|
console.error(chalk_1.default.red(`Unknown type: ${type}`));
|
|
47
|
-
console.log(chalk_1.default.yellow('Available types: module, entity, usecase, all'));
|
|
59
|
+
console.log(chalk_1.default.yellow('Available types: module, entity, usecase, service, event, query, all'));
|
|
48
60
|
process.exit(1);
|
|
49
61
|
}
|
|
50
62
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,gEAA4D;AAC5D,gEAA4D;AAC5D,kEAA8D;AAC9D,0DAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,wBAAwB,CAAC;KACjC,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IQueryHandler, QueryHandler } from '@nestjs/cqrs';
|
|
2
|
+
|
|
3
|
+
export class {{entityName}}Query {
|
|
4
|
+
constructor(
|
|
5
|
+
public readonly id: string,
|
|
6
|
+
) {}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@QueryHandler({{entityName}}Query)
|
|
10
|
+
export class {{entityName}}Handler implements IQueryHandler<{{entityName}}Query> {
|
|
11
|
+
constructor() {}
|
|
12
|
+
|
|
13
|
+
async execute(query: {{entityName}}Query): Promise<any> {
|
|
14
|
+
const { id } = query;
|
|
15
|
+
// Add your query logic here
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
@Injectable()
|
|
4
|
+
export class {{entityName}}Service {
|
|
5
|
+
constructor() {}
|
|
6
|
+
|
|
7
|
+
// Add your domain service methods here
|
|
8
|
+
// Example:
|
|
9
|
+
// async validateBusinessRule(data: any): Promise<boolean> {
|
|
10
|
+
// // Domain validation logic
|
|
11
|
+
// return true;
|
|
12
|
+
// }
|
|
13
|
+
}
|