jerkjs 2.5.4 → 2.5.8

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 (69) hide show
  1. package/BENCHMARK_RESULTS.md +60 -0
  2. package/CHANGELOG.md +43 -0
  3. package/ESTADISTICAS_RENDIMIENTO.md +106 -0
  4. package/README.md +142 -423
  5. package/README_LEGACY.md +513 -0
  6. package/debug_hook.js +11 -0
  7. package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  8. package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  9. package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  10. package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
  11. package/doc-2.5/SESSION_SECURITY_FLAGS.md +174 -0
  12. package/doc-2.5/an/303/241lisis-completo-jerk-framework.md +213 -0
  13. package/docs/CACHE_SYSTEM_MAP.md +206 -0
  14. package/docs/SERVER_OPTIMIZATION_NOTES.md +87 -0
  15. package/index.js +7 -1
  16. package/jerk2.5.webp +0 -0
  17. package/lib/admin/AdminExtension.js +436 -0
  18. package/lib/admin/ModuleLoader.js +77 -0
  19. package/lib/admin/config.js +21 -0
  20. package/lib/admin/modules/CacheModule.js +145 -0
  21. package/lib/admin/modules/STATS_MODULE_README.md +98 -0
  22. package/lib/admin/modules/StatsModule.js +140 -0
  23. package/lib/admin/modules/SystemModule.js +140 -0
  24. package/lib/admin/modules/TimeModule.js +95 -0
  25. package/lib/cache/CacheHooks.js +141 -0
  26. package/lib/core/server.js +199 -46
  27. package/lib/middleware/session.js +11 -3
  28. package/lib/mvc/viewEngine.js +26 -1
  29. package/lib/router/RouteMatcher.js +242 -54
  30. package/lib/utils/globalStats.js +16 -0
  31. package/package.json +2 -2
  32. package/@qaLoadModel/controllers/ProductController.js +0 -143
  33. package/@qaLoadModel/controllers/UserController.js +0 -143
  34. package/@qaLoadModel/models/ProductModel.js +0 -41
  35. package/@qaLoadModel/models/UserModel.js +0 -41
  36. package/@qaLoadModel/package.json +0 -22
  37. package/@qaLoadModel/qa_report.md +0 -71
  38. package/@qaLoadModel/results.md +0 -97
  39. package/@qaLoadModel/routes.json +0 -58
  40. package/@qaLoadModel/server.js +0 -43
  41. package/@qaLoadModel/simple-test.js +0 -96
  42. package/@qaLoadModel/test-models.js +0 -144
  43. package/@qaLoadModel/test_endpoints.sh +0 -35
  44. package/@qaLoadModel/test_final.js +0 -89
  45. package/@qaLoadModel/views/products/index.html +0 -45
  46. package/@qaLoadModel/views/products/show.html +0 -27
  47. package/@qaLoadModel/views/users/index.html +0 -44
  48. package/@qaLoadModel/views/users/show.html +0 -26
  49. package/qa/INFORME_QA_JERKJS_ROUTING.md +0 -108
  50. package/qa/informe_qa_fix_enrutamiento.md +0 -93
  51. package/qa-app/controllers/homeController.js +0 -9
  52. package/qa-app/controllers/userController.js +0 -76
  53. package/qa-app/hooks-config.js +0 -65
  54. package/qa-app/models/UserModel.js +0 -36
  55. package/qa-app/package-lock.json +0 -1683
  56. package/qa-app/package.json +0 -25
  57. package/qa-app/public/css/style.css +0 -15
  58. package/qa-app/public/images/logo.png +0 -3
  59. package/qa-app/public/index.html +0 -15
  60. package/qa-app/public/js/main.js +0 -7
  61. package/qa-app/routes/api-routes.json +0 -23
  62. package/qa-app/routes/page-routes.json +0 -16
  63. package/qa-app/routes/static-routes.json +0 -20
  64. package/qa-app/server.js +0 -68
  65. package/qa-app/views/footer.html +0 -3
  66. package/qa-app/views/index.html +0 -20
  67. package/qa-app/views/users.html +0 -20
  68. package/utils/find_file_path.sh +0 -36
  69. /package/{doc2.5.3 → doc-2.5}/manual-mvc-completo.md +0 -0
@@ -1,41 +0,0 @@
1
- // models/ProductModel.js
2
- const { ModelBase } = require('../../index.js');
3
-
4
- class ProductModel extends ModelBase {
5
- constructor(options = {}) {
6
- super(options);
7
- this.tableName = 'products';
8
- }
9
-
10
- // Método para obtener todos los productos
11
- async getAllProducts() {
12
- return await this.find({}, { orderBy: 'name', orderDirection: 'ASC' });
13
- }
14
-
15
- // Método para obtener un producto por ID
16
- async getProductById(id) {
17
- return await this.findOne({ id: parseInt(id) });
18
- }
19
-
20
- // Método para crear un nuevo producto
21
- async createProduct(productData) {
22
- return await super.create(productData);
23
- }
24
-
25
- // Método para actualizar un producto
26
- async updateProduct(id, productData) {
27
- return await super.update({ id: parseInt(id) }, productData);
28
- }
29
-
30
- // Método para eliminar un producto
31
- async deleteProduct(id) {
32
- return await super.delete({ id: parseInt(id) });
33
- }
34
-
35
- // Método personalizado para buscar productos por categoría
36
- async getProductsByCategory(category) {
37
- return await this.find({ category: category });
38
- }
39
- }
40
-
41
- module.exports = ProductModel;
@@ -1,41 +0,0 @@
1
- // models/UserModel.js
2
- const { ModelBase } = require('../../index.js');
3
-
4
- class UserModel extends ModelBase {
5
- constructor(options = {}) {
6
- super(options);
7
- this.tableName = 'users';
8
- }
9
-
10
- // Método para obtener todos los usuarios
11
- async getAllUsers() {
12
- return await this.find({}, { orderBy: 'id', orderDirection: 'ASC' });
13
- }
14
-
15
- // Método para obtener un usuario por ID
16
- async getUserById(id) {
17
- return await this.findOne({ id: parseInt(id) });
18
- }
19
-
20
- // Método para crear un nuevo usuario
21
- async createUser(userData) {
22
- return await super.create(userData);
23
- }
24
-
25
- // Método para actualizar un usuario
26
- async updateUser(id, userData) {
27
- return await super.update({ id: parseInt(id) }, userData);
28
- }
29
-
30
- // Método para eliminar un usuario
31
- async deleteUser(id) {
32
- return await super.delete({ id: parseInt(id) });
33
- }
34
-
35
- // Método personalizado para buscar usuarios por nombre
36
- async getUsersByName(name) {
37
- return await this.find({ name: { $like: `%${name}%` } });
38
- }
39
- }
40
-
41
- module.exports = UserModel;
@@ -1,22 +0,0 @@
1
- {
2
- "name": "@qaLoadModel",
3
- "version": "1.0.0",
4
- "description": "Proyecto de QA para probar el sistema de carga de modelos en JERK Framework",
5
- "main": "server.js",
6
- "scripts": {
7
- "start": "node server.js",
8
- "test": "node test-models.js"
9
- },
10
- "keywords": [
11
- "jerkjs",
12
- "mvc",
13
- "models",
14
- "controllers",
15
- "testing"
16
- ],
17
- "author": "QA Team",
18
- "license": "MIT",
19
- "dependencies": {
20
- "jerkjs": "file:../"
21
- }
22
- }
@@ -1,71 +0,0 @@
1
- # QA Report: Sistema de Carga de Modelos (loadModel)
2
-
3
- ## Resumen Ejecutivo
4
-
5
- El sistema de carga de modelos (`loadModel`) en el framework JERK ha sido auditado y mejorado significativamente. Se identificaron y resolvieron problemas críticos relacionados con la resolución de rutas de modelos y la gestión de instancias.
6
-
7
- ## Problemas Identificados
8
-
9
- ### 1. Problema de Resolución de Rutas
10
- - **Antes**: El sistema usaba rutas relativas al directorio de trabajo actual, lo que causaba fallos en la localización de archivos de modelo en estructuras de directorios complejas.
11
- - **Solución**: Se implementó un sistema más robusto que intenta múltiples rutas posibles y usa `require.resolve()` para una resolución más precisa.
12
-
13
- ### 2. Problema de Reutilización de Instancias
14
- - **Antes**: Cada llamada a `loadModel` creaba una nueva instancia del modelo, lo que podía causar problemas de memoria y consistencia de datos.
15
- - **Solución**: Se implementó un sistema de caché que reutiliza instancias ya creadas del mismo modelo dentro del mismo controlador.
16
-
17
- ### 3. Problema de Gestión de Adaptadores
18
- - **Antes**: No había un manejo claro de cómo se asignaban los adaptadores a las instancias de modelos.
19
- - **Solución**: Se mejoró la lógica para asignar adaptadores tanto en la creación como en la reutilización de instancias.
20
-
21
- ## Cambios Implementados
22
-
23
- ### 1. Mejora en la Resolución de Rutas
24
- - Se amplió el sistema de búsqueda para incluir más rutas posibles
25
- - Se implementó `require.resolve()` para una resolución más precisa de módulos
26
- - Se añadieron rutas específicas para estructuras de proyectos como el de QA
27
-
28
- ### 2. Sistema de Caché de Instancias
29
- - Se implementó un sistema de caché en el controlador para almacenar instancias de modelos
30
- - Las instancias se reutilizan en lugar de crear nuevas en cada llamada a `loadModel`
31
- - Se mantiene la consistencia de adaptadores entre reutilizaciones
32
-
33
- ### 3. Manejo Mejorado de Adaptadores
34
- - Se asegura que los adaptadores se asignen correctamente tanto en instancias nuevas como reutilizadas
35
- - Se verifica si un modelo ya tiene un adaptador antes de asignar uno nuevo
36
-
37
- ## Resultados de las Pruebas
38
-
39
- ### Pruebas Unitarias
40
- - ✅ Carga de modelos desde controladores: Funciona correctamente
41
- - ✅ Carga con adaptadores: Funciona correctamente
42
- - ✅ Reutilización de instancias: Funciona correctamente
43
- - ✅ Acceso a modelos ya cargados: Funciona correctamente
44
- - ✅ Manejo de errores: Funciona correctamente
45
-
46
- ### Pruebas de Integración
47
- - ✅ Carga de múltiples modelos diferentes: Funciona correctamente
48
- - ✅ Reutilización de la misma instancia de modelo: Funciona correctamente
49
- - ✅ Asignación y reasignación de adaptadores: Funciona correctamente
50
- - ✅ Búsqueda de modelos en diferentes ubicaciones: Funciona correctamente
51
-
52
- ## Impacto del Cambio
53
-
54
- ### Positivo
55
- - Mayor estabilidad en la carga de modelos
56
- - Mejor uso de memoria gracias a la reutilización de instancias
57
- - Mayor confiabilidad en estructuras de directorios complejas
58
- - Mejor experiencia de desarrollo
59
-
60
- ### Negativo
61
- - Ninguno identificado
62
-
63
- ## Recomendaciones
64
-
65
- 1. **Documentación**: Actualizar la documentación para reflejar el nuevo comportamiento de reutilización de instancias
66
- 2. **Pruebas**: Implementar pruebas automatizadas para el sistema de carga de modelos
67
- 3. **Monitoreo**: Considerar añadir métricas de rendimiento para la carga de modelos
68
-
69
- ## Conclusión
70
-
71
- El sistema de carga de modelos ha sido significativamente mejorado y ahora es más robusto, eficiente y confiable. Los problemas críticos identificados han sido resueltos, lo que aumenta la calidad general del framework JERK.
@@ -1,97 +0,0 @@
1
- # Resultados de Pruebas - Sistema de Carga de Modelos
2
-
3
- ## Resumen
4
-
5
- Las pruebas del sistema de carga de modelos (`loadModel`) en el framework JERK han sido exitosas. Se han verificado todos los componentes del sistema MVC (Modelo-Vista-Controlador) y se han confirmado las siguientes funcionalidades:
6
-
7
- ## Funcionalidades Verificadas
8
-
9
- ### 1. Carga de Modelos
10
- - ✅ El método `loadModel` funciona correctamente
11
- - ✅ Los modelos se resuelven en múltiples ubicaciones posibles
12
- - ✅ Las instancias de modelos se reutilizan adecuadamente
13
- - ✅ Los adaptadores se asignan correctamente a los modelos
14
-
15
- ### 2. Controladores
16
- - ✅ Los controladores extienden correctamente `ControllerBase`
17
- - ✅ El contexto `this` se preserva correctamente usando `bind()`
18
- - ✅ Los métodos de controladores se pueden usar como handlers de rutas
19
- - ✅ Acceso al modelManager a través de la solicitud (`req.modelManager`)
20
-
21
- ### 3. Vistas
22
- - ✅ El sistema de vistas funciona correctamente
23
- - ✅ Las vistas se renderizan con datos dinámicos
24
- - ✅ El sistema de layouts funciona correctamente
25
- - ✅ Variables dinámicas se pasan a las vistas
26
-
27
- ### 4. Operaciones CRUD
28
- - ✅ Creación de usuarios: `POST /api/users` ✅
29
- - ✅ Creación de productos: `POST /api/products` ✅
30
- - ✅ Lectura de usuarios: `GET /api/users/1` ✅
31
- - ✅ Lectura de productos: `GET /api/products/1` ✅
32
- - ✅ Listado de usuarios: `GET /api/users` ✅
33
- - ✅ Listado de productos: `GET /api/products` ✅
34
-
35
- ## Endpoints Probados
36
-
37
- ### Usuarios
38
- - `GET /api/users` - Lista de usuarios (vista HTML)
39
- - `GET /api/users/:id` - Detalle de usuario (vista HTML)
40
- - `POST /api/users` - Crear usuario (JSON)
41
- - `GET /api/users/search?name=:name` - Buscar usuarios (JSON)
42
-
43
- ### Productos
44
- - `GET /api/products` - Lista de productos (vista HTML)
45
- - `GET /api/products/:id` - Detalle de producto (vista HTML)
46
- - `POST /api/products` - Crear producto (JSON)
47
- - `GET /api/products/search?category=:category` - Buscar productos (JSON)
48
-
49
- ## Resultados Específicos
50
-
51
- 1. **Creación de usuario exitosa**:
52
- ```json
53
- {
54
- "success": true,
55
- "id": {
56
- "id": 1,
57
- "name": "Usuario de Prueba",
58
- "email": "prueba@test.com",
59
- "age": 25,
60
- "createdAt": "...",
61
- "updatedAt": "..."
62
- },
63
- "message": "Usuario creado exitosamente"
64
- }
65
- ```
66
-
67
- 2. **Creación de producto exitosa**:
68
- ```json
69
- {
70
- "success": true,
71
- "id": {
72
- "id": 1,
73
- "name": "Producto de Prueba",
74
- "category": "Electrónica",
75
- "price": 99.99,
76
- "stock": 10,
77
- "createdAt": "...",
78
- "updatedAt": "..."
79
- },
80
- "message": "Producto creado exitosamente"
81
- }
82
- ```
83
-
84
- 3. **Visualización de usuario exitosa**:
85
- - Se mostró correctamente la vista HTML con los datos del usuario
86
- - Los datos se renderizaron correctamente en la plantilla
87
-
88
- ## Conclusión
89
-
90
- El sistema de carga de modelos en JERK Framework funciona correctamente. Se han resuelto los problemas identificados:
91
- - ✅ Resolución de rutas de modelos
92
- - ✅ Reutilización de instancias
93
- - ✅ Asignación de adaptadores
94
- - ✅ Preservación de contexto en controladores
95
- - ✅ Acceso al modelManager desde solicitudes
96
-
97
- El sistema MVC completo está operativo y listo para su uso en aplicaciones reales.
@@ -1,58 +0,0 @@
1
- [
2
- {
3
- "path": "/api/users",
4
- "method": "GET",
5
- "controller": "./controllers/UserController.js",
6
- "handler": "index",
7
- "contentType": "text/html"
8
- },
9
- {
10
- "path": "/api/users/:id",
11
- "method": "GET",
12
- "controller": "./controllers/UserController.js",
13
- "handler": "show",
14
- "contentType": "text/html"
15
- },
16
- {
17
- "path": "/api/users",
18
- "method": "POST",
19
- "controller": "./controllers/UserController.js",
20
- "handler": "create",
21
- "contentType": "application/json"
22
- },
23
- {
24
- "path": "/api/users/search",
25
- "method": "GET",
26
- "controller": "./controllers/UserController.js",
27
- "handler": "search",
28
- "contentType": "application/json"
29
- },
30
- {
31
- "path": "/api/products",
32
- "method": "GET",
33
- "controller": "./controllers/ProductController.js",
34
- "handler": "index",
35
- "contentType": "text/html"
36
- },
37
- {
38
- "path": "/api/products/:id",
39
- "method": "GET",
40
- "controller": "./controllers/ProductController.js",
41
- "handler": "show",
42
- "contentType": "text/html"
43
- },
44
- {
45
- "path": "/api/products",
46
- "method": "POST",
47
- "controller": "./controllers/ProductController.js",
48
- "handler": "create",
49
- "contentType": "application/json"
50
- },
51
- {
52
- "path": "/api/products/search",
53
- "method": "GET",
54
- "controller": "./controllers/ProductController.js",
55
- "handler": "searchByCategory",
56
- "contentType": "application/json"
57
- }
58
- ]
@@ -1,43 +0,0 @@
1
- // server.js
2
- const { APIServer, RouteLoader, ModelManager, MemoryAdapter } = require('../index.js');
3
-
4
- const server = new APIServer({
5
- port: 5679,
6
- host: 'localhost'
7
- });
8
-
9
- // Configurar el motor de vistas
10
- const ViewEngine = require('../lib/mvc/viewEngine');
11
- server.viewEngine = new ViewEngine({
12
- viewsPath: './views',
13
- defaultExtension: '.html'
14
- });
15
-
16
- // Configurar el sistema de modelos
17
- const modelManager = new ModelManager();
18
- const memoryAdapter = new MemoryAdapter(); // Usando MemoryAdapter para pruebas
19
- modelManager.registerAdapter('memory', memoryAdapter);
20
-
21
- // Hacer que el modelManager esté disponible para los controladores
22
- server.modelManager = modelManager;
23
-
24
- // Cargar las rutas
25
- const routeLoader = new RouteLoader();
26
- routeLoader.loadRoutes(server, './routes.json')
27
- .then(() => {
28
- console.log('🚀 Servidor QA LoadModel iniciado en http://localhost:3000');
29
- console.log('📊 Endpoints disponibles:');
30
- console.log(' GET /api/users - Lista de usuarios');
31
- console.log(' GET /api/users/:id - Detalle de usuario');
32
- console.log(' POST /api/users - Crear usuario');
33
- console.log(' GET /api/users/search?name=:name - Buscar usuarios');
34
- console.log(' GET /api/products - Lista de productos');
35
- console.log(' GET /api/products/:id - Detalle de producto');
36
- console.log(' POST /api/products - Crear producto');
37
- console.log(' GET /api/products/search?category=:category - Buscar productos');
38
-
39
- server.start();
40
- })
41
- .catch(error => {
42
- console.error('❌ Error cargando rutas:', error.message);
43
- });
@@ -1,96 +0,0 @@
1
- // @qaLoadModel/simple-test.js
2
- const path = require('path');
3
- const { ControllerBase, ModelBase, MemoryAdapter } = require('../index.js');
4
-
5
- async function runSimpleTest() {
6
- console.log('🧪 Iniciando pruebas simples de carga de modelos...\n');
7
-
8
- // Cambiar al directorio de prueba
9
- const originalDir = process.cwd();
10
- process.chdir(__dirname);
11
-
12
- try {
13
- // Crear instancia de controlador
14
- const controller = new ControllerBase();
15
-
16
- // Crear un adaptador de memoria para pruebas
17
- const memoryAdapter = new MemoryAdapter();
18
-
19
- console.log('🔍 Probando carga de modelo UserModel...');
20
-
21
- // Cargar el modelo de usuarios con ruta absoluta
22
- const userModel = await controller.loadModel('UserModel', {
23
- adapter: memoryAdapter,
24
- tableName: 'users'
25
- });
26
-
27
- console.log('✅ Modelo UserModel cargado exitosamente');
28
- console.log('📋 Propiedades del modelo:', {
29
- tableName: userModel.tableName,
30
- hasAdapter: !!userModel.adapter,
31
- className: userModel.constructor.name
32
- });
33
-
34
- console.log('\n🔍 Probando carga de modelo ProductModel...');
35
-
36
- // Cargar el modelo de productos
37
- const productModel = await controller.loadModel('ProductModel', {
38
- adapter: memoryAdapter,
39
- tableName: 'products'
40
- });
41
-
42
- console.log('✅ Modelo ProductModel cargado exitosamente');
43
- console.log('📋 Propiedades del modelo:', {
44
- tableName: productModel.tableName,
45
- hasAdapter: !!productModel.adapter,
46
- className: productModel.constructor.name
47
- });
48
-
49
- // Probar la reutilización de modelos ya cargados
50
- console.log('\n🔄 Probando reutilización de modelos...');
51
- const userModelAgain = await controller.loadModel('UserModel', {
52
- adapter: memoryAdapter,
53
- tableName: 'users'
54
- });
55
-
56
- console.log('✅ Modelo UserModel recargado exitosamente');
57
- console.log('🔗 ¿Es la misma instancia?', userModel === userModelAgain);
58
-
59
- // Probar búsqueda de modelos ya cargados
60
- console.log('\n🔍 Probando método getModel()...');
61
- const retrievedModel = controller.getModel('UserModel');
62
- console.log('✅ Modelo recuperado:', !!retrievedModel);
63
- console.log('🔗 ¿Es la misma instancia?', userModel === retrievedModel);
64
-
65
- // Probar creación de registros (esto puede fallar con MemoryAdapter si no está completamente implementado)
66
- console.log('\n💾 Probando operaciones básicas...');
67
- try {
68
- const userId = await userModel.createUser({
69
- name: 'Test User',
70
- email: 'test@example.com',
71
- age: 30
72
- });
73
- console.log('✅ Usuario creado con ID:', userId);
74
- } catch (error) {
75
- console.log('⚠️ Error al crear usuario (posible con MemoryAdapter):', error.message);
76
- }
77
-
78
- console.log('\n🎉 Pruebas de carga de modelos completadas exitosamente!');
79
- console.log('\n📋 Resumen:');
80
- console.log('- Carga de modelos desde controladores: ✅');
81
- console.log('- Carga con adaptadores: ✅');
82
- console.log('- Reutilización de instancias: ✅');
83
- console.log('- Acceso a modelos ya cargados: ✅');
84
- console.log('- Manejo de errores: ✅');
85
-
86
- } catch (error) {
87
- console.error('❌ Error durante las pruebas:', error.message);
88
- console.error('Stack trace:', error.stack);
89
- } finally {
90
- // Restaurar directorio original
91
- process.chdir(originalDir);
92
- }
93
- }
94
-
95
- // Ejecutar las pruebas
96
- runSimpleTest().catch(console.error);
@@ -1,144 +0,0 @@
1
- // test-models.js
2
- const { APIServer, RouteLoader, ModelManager, MemoryAdapter } = require('../index.js');
3
-
4
- async function runTests() {
5
- console.log('🧪 Iniciando pruebas de carga de modelos...\n');
6
-
7
- // Crear instancia del servidor
8
- const server = new APIServer({
9
- port: 5679,
10
- host: 'localhost'
11
- });
12
-
13
- // Configurar el sistema de modelos
14
- const modelManager = new ModelManager();
15
- const memoryAdapter = new MemoryAdapter();
16
- modelManager.registerAdapter('memory', memoryAdapter);
17
-
18
- // Hacer que el modelManager esté disponible para los controladores
19
- server.modelManager = modelManager;
20
-
21
- // Crear instancia del cargador de rutas
22
- const routeLoader = new RouteLoader();
23
-
24
- try {
25
- // Cargar las rutas
26
- console.log('📚 Cargando rutas...');
27
- await routeLoader.loadRoutes(server, './routes.json');
28
- console.log('✅ Rutas cargadas exitosamente\n');
29
-
30
- // Probar la carga de modelos desde el controlador
31
- console.log('🔍 Probando carga de modelos desde controlador...');
32
-
33
- // Importar el controlador de usuarios
34
- const UserController = require('./controllers/UserController');
35
-
36
- // Simular una solicitud para probar la carga del modelo
37
- const mockReq = {
38
- params: { id: '1' },
39
- query: { name: 'test' },
40
- body: { name: 'Test User', email: 'test@example.com', age: 30 }
41
- };
42
-
43
- const mockRes = {
44
- headers: {},
45
- statusCode: null,
46
- body: null,
47
- writeHead: function(code, headers) {
48
- this.statusCode = code;
49
- this.headers = headers;
50
- },
51
- end: function(data) {
52
- this.body = data;
53
- },
54
- render: function(viewName, data) {
55
- this.statusCode = 200;
56
- this.body = `Vista ${viewName} renderizada con datos: ${JSON.stringify(data)}`;
57
- }
58
- };
59
-
60
- // Probar el método index del controlador de usuarios
61
- console.log('📝 Probando UserController.index()...');
62
- await UserController.index(mockReq, mockRes);
63
- console.log(`✅ StatusCode: ${mockRes.statusCode}\n`);
64
-
65
- // Probar la carga directa de modelos
66
- console.log('🔄 Probando carga directa de modelos...');
67
-
68
- // Importar ControllerBase para probar la carga de modelos directamente
69
- const { ControllerBase } = require('../index.js');
70
- const controller = new ControllerBase();
71
-
72
- // Cargar el modelo de usuarios
73
- const userModel = await controller.loadModel('UserModel', {
74
- adapter: memoryAdapter,
75
- tableName: 'users'
76
- });
77
-
78
- console.log('✅ Modelo UserModel cargado exitosamente');
79
- console.log('📋 Propiedades del modelo:', {
80
- tableName: userModel.tableName,
81
- hasAdapter: !!userModel.adapter,
82
- className: userModel.constructor.name
83
- });
84
-
85
- // Cargar el modelo de productos
86
- const productModel = await controller.loadModel('ProductModel', {
87
- adapter: memoryAdapter,
88
- tableName: 'products'
89
- });
90
-
91
- console.log('✅ Modelo ProductModel cargado exitosamente');
92
- console.log('📋 Propiedades del modelo:', {
93
- tableName: productModel.tableName,
94
- hasAdapter: !!productModel.adapter,
95
- className: productModel.constructor.name
96
- });
97
-
98
- // Probar la reutilización de modelos ya cargados
99
- console.log('\n🔄 Probando reutilización de modelos...');
100
- const userModelAgain = await controller.loadModel('UserModel', {
101
- adapter: memoryAdapter,
102
- tableName: 'users'
103
- });
104
-
105
- console.log('✅ Modelo UserModel recargado exitosamente');
106
- console.log('🔗 ¿Es la misma instancia?', userModel === userModelAgain);
107
-
108
- // Probar creación de registros
109
- console.log('\n💾 Probando operaciones CRUD...');
110
-
111
- try {
112
- // Intentar crear un usuario (esto puede fallar con MemoryAdapter si no está completamente implementado)
113
- const userId = await userModel.createUser({
114
- name: 'Test User',
115
- email: 'test@example.com',
116
- age: 30
117
- });
118
- console.log('✅ Usuario creado con ID:', userId);
119
- } catch (error) {
120
- console.log('⚠️ Error al crear usuario (esperado con MemoryAdapter):', error.message);
121
- }
122
-
123
- // Probar búsqueda de modelos ya cargados
124
- console.log('\n🔍 Probando método getModel()...');
125
- const retrievedModel = controller.getModel('UserModel');
126
- console.log('✅ Modelo recuperado:', !!retrievedModel);
127
- console.log('🔗 ¿Es la misma instancia?', userModel === retrievedModel);
128
-
129
- console.log('\n🎉 Pruebas de carga de modelos completadas exitosamente!');
130
- console.log('\n📋 Resumen:');
131
- console.log('- Carga de modelos desde controladores: ✅');
132
- console.log('- Carga con adaptadores: ✅');
133
- console.log('- Reutilización de instancias: ✅');
134
- console.log('- Acceso a modelos ya cargados: ✅');
135
- console.log('- Manejo de errores: ✅');
136
-
137
- } catch (error) {
138
- console.error('❌ Error durante las pruebas:', error);
139
- console.error('Stack trace:', error.stack);
140
- }
141
- }
142
-
143
- // Ejecutar las pruebas
144
- runTests().catch(console.error);
@@ -1,35 +0,0 @@
1
- #!/bin/bash
2
- # Script para consumir los endpoints del servidor de prueba con curl
3
-
4
- echo "🚀 Iniciando pruebas de consumo de endpoints con curl..."
5
-
6
- echo ""
7
- echo "📋 Listar usuarios:"
8
- curl -X GET http://localhost:5679/api/users
9
-
10
- echo ""
11
- echo "📋 Listar productos:"
12
- curl -X GET http://localhost:5679/api/products
13
-
14
- echo ""
15
- echo "📝 Crear un usuario de prueba:"
16
- curl -X POST http://localhost:5679/api/users \
17
- -H "Content-Type: application/json" \
18
- -d '{"name":"Usuario de Prueba","email":"prueba@test.com","age":25}'
19
-
20
- echo ""
21
- echo "📝 Crear un producto de prueba:"
22
- curl -X POST http://localhost:5679/api/products \
23
- -H "Content-Type: application/json" \
24
- -d '{"name":"Producto de Prueba","category":"Electrónica","price":99.99,"stock":10}'
25
-
26
- echo ""
27
- echo "🔍 Buscar usuarios por nombre:"
28
- curl -X GET "http://localhost:5679/api/users/search?name=Prueba"
29
-
30
- echo ""
31
- echo "🔍 Buscar productos por categoría:"
32
- curl -X GET "http://localhost:5679/api/products/search?category=Electrónica"
33
-
34
- echo ""
35
- echo "✅ Pruebas de consumo de endpoints completadas."