@saulpaulus17/node-module-generator 2.0.8 → 3.0.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.
Files changed (66) hide show
  1. package/README.md +13 -12
  2. package/bin/cli.js +17 -6
  3. package/commands/dto.command.js +3 -3
  4. package/commands/module.command.js +2 -2
  5. package/commands/repository.command.js +6 -6
  6. package/commands/resource.command.js +3 -3
  7. package/commands/usecase.command.js +2 -2
  8. package/generator/dto.generator.js +28 -17
  9. package/generator/module.generator.js +57 -55
  10. package/generator/repository.generator.js +38 -29
  11. package/generator/resource.generator.js +56 -54
  12. package/generator/usecase.generator.js +34 -21
  13. package/package.json +3 -3
  14. package/templates/module/controller.test.ejs +1 -1
  15. package/templates/module/di.ejs +6 -6
  16. package/templates/module/route.ejs +2 -1
  17. package/templates/module/usecase.test.ejs +1 -1
  18. package/utils/case.util.js +24 -7
  19. package/utils/file.util.js +46 -0
  20. package/utils/logger.util.js +30 -0
  21. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  22. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  23. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  24. package/.github/workflows/ci.yml +0 -28
  25. package/.github/workflows/release.yml +0 -39
  26. package/DOCS_STEPS.md +0 -40
  27. package/assets/banner.png +0 -0
  28. package/release.yml +0 -0
  29. package/src/modules/Auth/Auth.module.js +0 -15
  30. package/src/modules/Auth/application/dtos/auth.dto.js +0 -10
  31. package/src/modules/Auth/application/usecases/AuthUseCase.js +0 -12
  32. package/src/modules/Auth/application/usecases/AuthUseCase.test.js +0 -30
  33. package/src/modules/Auth/domain/entities/Auth.js +0 -5
  34. package/src/modules/Auth/domain/repositories/AuthRepository.js +0 -9
  35. package/src/modules/Auth/infrastructure/repositories/PrismaAuthRepository.js +0 -15
  36. package/src/modules/Auth/interfaces/controllers/AuthController.js +0 -15
  37. package/src/modules/Auth/interfaces/controllers/AuthController.test.js +0 -49
  38. package/src/modules/Auth/interfaces/routes/auth.routes.js +0 -9
  39. package/src/modules/Auth/package.json +0 -3
  40. package/src/modules/order/application/usecases/create-order.usecase.js +0 -15
  41. package/src/modules/order/application/usecases/create-order.usecase.test.js +0 -26
  42. package/src/modules/order/domain/entities/order.entity.js +0 -8
  43. package/src/modules/order/domain/repositories/order.repository.interface.js +0 -11
  44. package/src/modules/order/infrastructure/repositories/order.repository.impl.js +0 -23
  45. package/src/modules/order/infrastructure/validation/create-order.schema.js +0 -7
  46. package/src/modules/order/interfaces/controllers/order.controller.js +0 -16
  47. package/src/modules/order/interfaces/controllers/order.controller.test.js +0 -46
  48. package/src/modules/order/interfaces/routes/order.routes.js +0 -9
  49. package/src/modules/order/order.module.js +0 -16
  50. package/src/modules/product/application/usecases/getProduct.usecase.js +0 -15
  51. package/src/modules/product/application/usecases/getProduct.usecase.test.js +0 -26
  52. package/src/modules/product/domain/entities/product.entity.js +0 -8
  53. package/src/modules/product/domain/repositories/product.repository.interface.js +0 -11
  54. package/src/modules/product/infrastructure/repositories/product.repository.impl.js +0 -23
  55. package/src/modules/product/infrastructure/validation/getProduct.schema.js +0 -7
  56. package/src/modules/product/product.module.js +0 -5
  57. package/src/modules/user/application/usecases/create-user.usecase.js +0 -15
  58. package/src/modules/user/application/usecases/create-user.usecase.test.js +0 -26
  59. package/src/modules/user/domain/entities/user.entity.js +0 -8
  60. package/src/modules/user/domain/repositories/user.repository.interface.js +0 -11
  61. package/src/modules/user/infrastructure/repositories/user.repository.impl.js +0 -23
  62. package/src/modules/user/infrastructure/validation/create-user.schema.js +0 -7
  63. package/src/modules/user/interfaces/controllers/user.controller.js +0 -16
  64. package/src/modules/user/interfaces/controllers/user.controller.test.js +0 -46
  65. package/src/modules/user/interfaces/routes/user.routes.js +0 -9
  66. package/src/modules/user/user.module.js +0 -16
@@ -1,46 +0,0 @@
1
- const OrderController = require('./order.controller');
2
-
3
- describe('OrderController', () => {
4
- let controller;
5
- let mockUseCase;
6
- let mockReq;
7
- let mockRes;
8
- let mockNext;
9
-
10
- beforeEach(() => {
11
- mockUseCase = {
12
- execute: jest.fn()
13
- };
14
- controller = new OrderController({ orderUseCase: mockUseCase });
15
- mockReq = {
16
- body: { test: 'data' }
17
- };
18
- mockRes = {
19
- status: jest.fn().mockReturnThis(),
20
- json: jest.fn()
21
- };
22
- mockNext = jest.fn();
23
- });
24
-
25
- describe('create', () => {
26
- it('should return 201 and result if use case succeeds', async () => {
27
- const mockResult = { id: 1, ...mockReq.body };
28
- mockUseCase.execute.mockResolvedValue(mockResult);
29
-
30
- await controller.create(mockReq, mockRes, mockNext);
31
-
32
- expect(mockUseCase.execute).toHaveBeenCalledWith(mockReq.body);
33
- expect(mockRes.status).toHaveBeenCalledWith(201);
34
- expect(mockRes.json).toHaveBeenCalledWith({ success: true, data: mockResult });
35
- });
36
-
37
- it('should call next with error if use case fails', async () => {
38
- const error = new Error('Test error');
39
- mockUseCase.execute.mockRejectedValue(error);
40
-
41
- await controller.create(mockReq, mockRes, mockNext);
42
-
43
- expect(mockNext).toHaveBeenCalledWith(error);
44
- });
45
- });
46
- });
@@ -1,9 +0,0 @@
1
- const { Router } = require('express');
2
-
3
- module.exports = function({ orderController }) {
4
- const router = Router();
5
-
6
- router.post('/', orderController.create);
7
-
8
- return router;
9
- };
@@ -1,16 +0,0 @@
1
- const { asClass, asFunction } = require('awilix');
2
-
3
- const OrderController = require('./interfaces/controllers/order.controller');
4
- const createOrderRoutes = require('./interfaces/routes/order.routes');
5
- const CreateOrderUseCase = require('./application/usecases/create-order.usecase');
6
- const OrderRepository = require('./infrastructure/repositories/order.repository.impl');
7
-
8
- module.exports = function registerOrderModule(container) {
9
- container.register({
10
- orderController: asClass(OrderController).singleton(),
11
- orderRoutes: asFunction(createOrderRoutes).singleton(),
12
- orderUseCase: asClass(CreateOrderUseCase).singleton(),
13
- // Providing the interface's name as the injection token for the implementation
14
- orderRepository: asClass(OrderRepository).singleton(),
15
- });
16
- };
@@ -1,15 +0,0 @@
1
- class GetproductUseCase {
2
- constructor({ productRepository }) {
3
- this.productRepository = productRepository;
4
- }
5
-
6
- async execute(dto) {
7
- // Validate DTO...
8
- // Apply business logic...
9
-
10
- const entity = await this.productRepository.save(dto);
11
- return entity;
12
- }
13
- }
14
-
15
- module.exports = GetproductUseCase;
@@ -1,26 +0,0 @@
1
- const GetproductUseCase = require('./getProduct.usecase');
2
-
3
- describe('GetproductUseCase', () => {
4
- let useCase;
5
- let mockRepository;
6
-
7
- beforeEach(() => {
8
- mockRepository = {
9
- save: jest.fn()
10
- };
11
- useCase = new GetproductUseCase({ productRepository: mockRepository });
12
- });
13
-
14
- describe('execute', () => {
15
- it('should save data using the repository and return the entity', async () => {
16
- const mockDto = { name: 'Test' };
17
- const mockEntity = { id: 1, ...mockDto };
18
- mockRepository.save.mockResolvedValue(mockEntity);
19
-
20
- const result = await useCase.execute(mockDto);
21
-
22
- expect(mockRepository.save).toHaveBeenCalledWith(mockDto);
23
- expect(result).toEqual(mockEntity);
24
- });
25
- });
26
- });
@@ -1,8 +0,0 @@
1
- class ProductEntity {
2
- constructor({ id, ...props }) {
3
- this.id = id;
4
- Object.assign(this, props);
5
- }
6
- }
7
-
8
- module.exports = ProductEntity;
@@ -1,11 +0,0 @@
1
- class IProductRepository {
2
- async save(entity) {
3
- throw new Error('Method not implemented.');
4
- }
5
-
6
- async findById(id) {
7
- throw new Error('Method not implemented.');
8
- }
9
- }
10
-
11
- module.exports = IProductRepository;
@@ -1,23 +0,0 @@
1
- const IProductRepository = require('../../domain/repositories/product.repository.interface');
2
- const ProductEntity = require('../../domain/entities/product.entity');
3
-
4
- class ProductRepositoryImpl extends IProductRepository {
5
- // If using Prisma, you would do: constructor({ prisma }) { super(); this.prisma = prisma; }
6
- constructor() {
7
- super();
8
- this.db = new Map();
9
- }
10
-
11
- async save(dto) {
12
- const id = Date.now().toString(); // Mock ID generation
13
- const entity = new ProductEntity({ id, ...dto });
14
- this.db.set(id, entity);
15
- return entity;
16
- }
17
-
18
- async findById(id) {
19
- return this.db.get(id) || null;
20
- }
21
- }
22
-
23
- module.exports = ProductRepositoryImpl;
@@ -1,7 +0,0 @@
1
- const Joi = require('joi'); // Usually you'd use joi or another lib
2
-
3
- const createGetproductSchema = Joi.object({
4
- // Define DTO validation rules
5
- });
6
-
7
- module.exports = createGetproductSchema;
@@ -1,5 +0,0 @@
1
- module.exports = function registerProductModule(container) {
2
- container.register({
3
- // Inject dependencies here
4
- });
5
- };
@@ -1,15 +0,0 @@
1
- class CreateUserUseCase {
2
- constructor({ userRepository }) {
3
- this.userRepository = userRepository;
4
- }
5
-
6
- async execute(dto) {
7
- // Validate DTO...
8
- // Apply business logic...
9
-
10
- const entity = await this.userRepository.save(dto);
11
- return entity;
12
- }
13
- }
14
-
15
- module.exports = CreateUserUseCase;
@@ -1,26 +0,0 @@
1
- const CreateUserUseCase = require('./create-user.usecase');
2
-
3
- describe('CreateUserUseCase', () => {
4
- let useCase;
5
- let mockRepository;
6
-
7
- beforeEach(() => {
8
- mockRepository = {
9
- save: jest.fn()
10
- };
11
- useCase = new CreateUserUseCase({ userRepository: mockRepository });
12
- });
13
-
14
- describe('execute', () => {
15
- it('should save data using the repository and return the entity', async () => {
16
- const mockDto = { name: 'Test' };
17
- const mockEntity = { id: 1, ...mockDto };
18
- mockRepository.save.mockResolvedValue(mockEntity);
19
-
20
- const result = await useCase.execute(mockDto);
21
-
22
- expect(mockRepository.save).toHaveBeenCalledWith(mockDto);
23
- expect(result).toEqual(mockEntity);
24
- });
25
- });
26
- });
@@ -1,8 +0,0 @@
1
- class UserEntity {
2
- constructor({ id, ...props }) {
3
- this.id = id;
4
- Object.assign(this, props);
5
- }
6
- }
7
-
8
- module.exports = UserEntity;
@@ -1,11 +0,0 @@
1
- class IUserRepository {
2
- async save(entity) {
3
- throw new Error('Method not implemented.');
4
- }
5
-
6
- async findById(id) {
7
- throw new Error('Method not implemented.');
8
- }
9
- }
10
-
11
- module.exports = IUserRepository;
@@ -1,23 +0,0 @@
1
- const IUserRepository = require('../../domain/repositories/user.repository.interface');
2
- const UserEntity = require('../../domain/entities/user.entity');
3
-
4
- class UserRepositoryImpl extends IUserRepository {
5
- // If using Prisma, you would do: constructor({ prisma }) { super(); this.prisma = prisma; }
6
- constructor() {
7
- super();
8
- this.db = new Map();
9
- }
10
-
11
- async save(dto) {
12
- const id = Date.now().toString(); // Mock ID generation
13
- const entity = new UserEntity({ id, ...dto });
14
- this.db.set(id, entity);
15
- return entity;
16
- }
17
-
18
- async findById(id) {
19
- return this.db.get(id) || null;
20
- }
21
- }
22
-
23
- module.exports = UserRepositoryImpl;
@@ -1,7 +0,0 @@
1
- const Joi = require('joi'); // Usually you'd use joi or another lib
2
-
3
- const createUserSchema = Joi.object({
4
- // Define DTO validation rules
5
- });
6
-
7
- module.exports = createUserSchema;
@@ -1,16 +0,0 @@
1
- class UserController {
2
- constructor({ userUseCase }) {
3
- this.userUseCase = userUseCase;
4
- }
5
-
6
- create = async (req, res, next) => {
7
- try {
8
- const result = await this.userUseCase.execute(req.body);
9
- res.status(201).json({ success: true, data: result });
10
- } catch (error) {
11
- next(error);
12
- }
13
- };
14
- }
15
-
16
- module.exports = UserController;
@@ -1,46 +0,0 @@
1
- const UserController = require('./user.controller');
2
-
3
- describe('UserController', () => {
4
- let controller;
5
- let mockUseCase;
6
- let mockReq;
7
- let mockRes;
8
- let mockNext;
9
-
10
- beforeEach(() => {
11
- mockUseCase = {
12
- execute: jest.fn()
13
- };
14
- controller = new UserController({ userUseCase: mockUseCase });
15
- mockReq = {
16
- body: { test: 'data' }
17
- };
18
- mockRes = {
19
- status: jest.fn().mockReturnThis(),
20
- json: jest.fn()
21
- };
22
- mockNext = jest.fn();
23
- });
24
-
25
- describe('create', () => {
26
- it('should return 201 and result if use case succeeds', async () => {
27
- const mockResult = { id: 1, ...mockReq.body };
28
- mockUseCase.execute.mockResolvedValue(mockResult);
29
-
30
- await controller.create(mockReq, mockRes, mockNext);
31
-
32
- expect(mockUseCase.execute).toHaveBeenCalledWith(mockReq.body);
33
- expect(mockRes.status).toHaveBeenCalledWith(201);
34
- expect(mockRes.json).toHaveBeenCalledWith({ success: true, data: mockResult });
35
- });
36
-
37
- it('should call next with error if use case fails', async () => {
38
- const error = new Error('Test error');
39
- mockUseCase.execute.mockRejectedValue(error);
40
-
41
- await controller.create(mockReq, mockRes, mockNext);
42
-
43
- expect(mockNext).toHaveBeenCalledWith(error);
44
- });
45
- });
46
- });
@@ -1,9 +0,0 @@
1
- const { Router } = require('express');
2
-
3
- module.exports = function({ userController }) {
4
- const router = Router();
5
-
6
- router.post('/', userController.create);
7
-
8
- return router;
9
- };
@@ -1,16 +0,0 @@
1
- const { asClass, asFunction } = require('awilix');
2
-
3
- const UserController = require('./interfaces/controllers/user.controller');
4
- const createUserRoutes = require('./interfaces/routes/user.routes');
5
- const CreateUserUseCase = require('./application/usecases/create-user.usecase');
6
- const UserRepository = require('./infrastructure/repositories/user.repository.impl');
7
-
8
- module.exports = function registerUserModule(container) {
9
- container.register({
10
- userController: asClass(UserController).singleton(),
11
- userRoutes: asFunction(createUserRoutes).singleton(),
12
- userUseCase: asClass(CreateUserUseCase).singleton(),
13
- // Providing the interface's name as the injection token for the implementation
14
- userRepository: asClass(UserRepository).singleton(),
15
- });
16
- };