blackcoffee2 2.1.0 → 2.1.2
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/.env.example +67 -0
- package/CHANGELOG.md +167 -0
- package/README.md +1 -3
- package/config/database.json +11 -0
- package/controllers/admin/AuthController.js +2 -1
- package/core/ViewHelper.js +75 -0
- package/core/hotReload.js +1 -1
- package/data/blackcoffee_admin.db-shm +0 -0
- package/data/blackcoffee_admin.db-wal +0 -0
- package/includes/adminAuth.js +5 -3
- package/includes/sessions.js +1 -1
- package/otrack.tar.gz +0 -0
- package/package.json +4 -2
- package/programatically/initFlow.js +2 -2
- package/test-aplicacion.con-logisession/BlackCoffee.js +0 -226
- package/test-aplicacion.con-logisession/SSL_SETUP.md +0 -53
- package/test-aplicacion.con-logisession/certs/ca-certificate.pem +0 -32
- package/test-aplicacion.con-logisession/certs/ca-private-key.pem +0 -52
- package/test-aplicacion.con-logisession/certs/certificate-2048.pem +0 -22
- package/test-aplicacion.con-logisession/certs/certificate.pem +0 -32
- package/test-aplicacion.con-logisession/certs/private-key-2048.pem +0 -28
- package/test-aplicacion.con-logisession/certs/private-key.pem +0 -52
- package/test-aplicacion.con-logisession/config/iaQueueSetup.js +0 -84
- package/test-aplicacion.con-logisession/config/qwen-rules.json +0 -39
- package/test-aplicacion.con-logisession/controllers/analyticsController.js +0 -117
- package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +0 -142
- package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +0 -439
- package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +0 -223
- package/test-aplicacion.con-logisession/controllers/endpointController.js +0 -66
- package/test-aplicacion.con-logisession/controllers/example.js +0 -183
- package/test-aplicacion.con-logisession/controllers/iaQueueController.js +0 -367
- package/test-aplicacion.con-logisession/controllers/queueController.js +0 -206
- package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +0 -197
- package/test-aplicacion.con-logisession/controllers/test.js +0 -0
- package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +0 -78
- package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +0 -412
- package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +0 -437
- package/test-aplicacion.con-logisession/hooks/admin-hooks.js +0 -20
- package/test-aplicacion.con-logisession/hooks/general-hooks.js +0 -97
- package/test-aplicacion.con-logisession/hooks/queue-hooks.js +0 -64
- package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +0 -38
- package/test-aplicacion.con-logisession/hooks/security-hooks.js +0 -24
- package/test-aplicacion.con-logisession/insitu-admin-client/README.md +0 -69
- package/test-aplicacion.con-logisession/insitu-admin-client/package.json +0 -23
- package/test-aplicacion.con-logisession/insitu-admin-client.js +0 -257
- package/test-aplicacion.con-logisession/models/ExampleModel.js +0 -88
- package/test-aplicacion.con-logisession/models/QueueJobModel.js +0 -263
- package/test-aplicacion.con-logisession/models/TokenModel.js +0 -207
- package/test-aplicacion.con-logisession/models/auth/AuthModel.js +0 -66
- package/test-aplicacion.con-logisession/models/auth/UserModel.js +0 -189
- package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +0 -213
- package/test-aplicacion.con-logisession/models/tracking/EventModel.js +0 -366
- package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +0 -131
- package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +0 -360
- package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +0 -286
- package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +0 -207
- package/test-aplicacion.con-logisession/package-lock.json +0 -3313
- package/test-aplicacion.con-logisession/package.json +0 -32
- package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +0 -1339
- package/test-aplicacion.con-logisession/public/css/style.css +0 -64
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +0 -18
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +0 -16
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +0 -43
- package/test-aplicacion.con-logisession/public/images/logo.svg +0 -7
- package/test-aplicacion.con-logisession/public/js/main.js +0 -67
- package/test-aplicacion.con-logisession/routes/analytics-routes.json +0 -8
- package/test-aplicacion.con-logisession/routes/auth-routes.json +0 -98
- package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +0 -20
- package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +0 -16
- package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +0 -11
- package/test-aplicacion.con-logisession/routes/endpoints-routes.json +0 -8
- package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +0 -26
- package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +0 -20
- package/test-aplicacion.con-logisession/routes/queue-routes.json +0 -32
- package/test-aplicacion.con-logisession/routes/qwen-routes.json +0 -14
- package/test-aplicacion.con-logisession/routes/static-routes.json +0 -29
- package/test-aplicacion.con-logisession/routes/tracking-routes.json +0 -58
- package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +0 -51
- package/test-aplicacion.con-logisession/utils/dbAdapter.js +0 -88
- package/test-aplicacion.con-logisession/utils/qbWrapper.js +0 -4
- package/test-aplicacion.con-logisession/utils/queueProcessor.js +0 -305
- package/test-aplicacion.con-logisession/utils/qwenRulesService.js +0 -131
- package/test-aplicacion.con-logisession/utils/tokenHelper.js +0 -22
- package/test-aplicacion.con-logisession/views/auth/dashboard.html +0 -443
- package/test-aplicacion.con-logisession/views/auth/forgot-password.html +0 -200
- package/test-aplicacion.con-logisession/views/auth/login.html +0 -213
- package/test-aplicacion.con-logisession/views/auth/register.html +0 -294
- package/test-aplicacion.con-logisession/views/contact/form.html +0 -47
- package/test-aplicacion.con-logisession/views/products/index.html +0 -39
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
const { ControllerBase } = require('insitu-js');
|
|
2
|
-
const QueueJobModel = require('../models/QueueJobModel');
|
|
3
|
-
const { queueProcessor } = require('../utils/queueProcessor');
|
|
4
|
-
|
|
5
|
-
class QueueController extends ControllerBase {
|
|
6
|
-
constructor(options = {}) {
|
|
7
|
-
super(options);
|
|
8
|
-
// Usar la instancia global del modelo de cola
|
|
9
|
-
const QueueJobModel = require('../models/QueueJobModel');
|
|
10
|
-
this.jobModel = QueueJobModel;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// Añadir un trabajo a la cola
|
|
14
|
-
async addToQueue(req, res) {
|
|
15
|
-
try {
|
|
16
|
-
let requestData = {};
|
|
17
|
-
|
|
18
|
-
if (req.body) {
|
|
19
|
-
if (typeof req.body === 'string') {
|
|
20
|
-
requestData = JSON.parse(req.body);
|
|
21
|
-
} else {
|
|
22
|
-
requestData = req.body;
|
|
23
|
-
}
|
|
24
|
-
} else {
|
|
25
|
-
let body = '';
|
|
26
|
-
for await (const chunk of req) {
|
|
27
|
-
body += chunk.toString();
|
|
28
|
-
}
|
|
29
|
-
requestData = JSON.parse(body);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Validar que el payload exista
|
|
33
|
-
if (!requestData.payload) {
|
|
34
|
-
return this.json(res, {
|
|
35
|
-
success: false,
|
|
36
|
-
error: 'Missing payload in request'
|
|
37
|
-
}, 400);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Crear el trabajo
|
|
41
|
-
const jobData = {
|
|
42
|
-
queue: requestData.queue || 'default',
|
|
43
|
-
payload: requestData.payload,
|
|
44
|
-
max_attempts: requestData.max_attempts || 3,
|
|
45
|
-
scheduled_for: requestData.scheduled_for || new Date().toISOString(),
|
|
46
|
-
priority: requestData.priority || 0
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const job = await this.jobModel.createJob(jobData);
|
|
50
|
-
|
|
51
|
-
this.json(res, {
|
|
52
|
-
success: true,
|
|
53
|
-
data: {
|
|
54
|
-
jobId: job.id,
|
|
55
|
-
queue: job.queue,
|
|
56
|
-
status: job.status,
|
|
57
|
-
scheduled_for: job.scheduled_for
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
} catch (error) {
|
|
62
|
-
this.json(res, {
|
|
63
|
-
success: false,
|
|
64
|
-
error: error.message
|
|
65
|
-
}, 500);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Consultar el estado de un trabajo
|
|
70
|
-
async getJobStatus(req, res) {
|
|
71
|
-
try {
|
|
72
|
-
const jobId = req.params?.id || this.input('id', null);
|
|
73
|
-
|
|
74
|
-
if (!jobId) {
|
|
75
|
-
return this.json(res, {
|
|
76
|
-
success: false,
|
|
77
|
-
error: 'Job ID is required'
|
|
78
|
-
}, 400);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const jobStatus = await this.jobModel.getJobStatus(jobId);
|
|
82
|
-
|
|
83
|
-
if (!jobStatus) {
|
|
84
|
-
return this.json(res, {
|
|
85
|
-
success: false,
|
|
86
|
-
error: 'Job not found'
|
|
87
|
-
}, 404);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
this.json(res, {
|
|
91
|
-
success: true,
|
|
92
|
-
data: jobStatus
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
} catch (error) {
|
|
96
|
-
this.json(res, {
|
|
97
|
-
success: false,
|
|
98
|
-
error: error.message
|
|
99
|
-
}, 500);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Obtener estadísticas de la cola
|
|
104
|
-
async getQueueStats(req, res) {
|
|
105
|
-
try {
|
|
106
|
-
const stats = {
|
|
107
|
-
pending: this.jobModel.getJobsByStatus('pending').length,
|
|
108
|
-
processing: this.jobModel.getJobsByStatus('processing').length,
|
|
109
|
-
completed: this.jobModel.getJobsByStatus('completed').length,
|
|
110
|
-
failed: this.jobModel.getJobsByStatus('failed').length,
|
|
111
|
-
queues: Array.from(this.jobModel.queues.keys())
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
this.json(res, {
|
|
115
|
-
success: true,
|
|
116
|
-
data: stats
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
} catch (error) {
|
|
120
|
-
this.json(res, {
|
|
121
|
-
success: false,
|
|
122
|
-
error: error.message
|
|
123
|
-
}, 500);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Obtener trabajos por estado
|
|
128
|
-
async getJobsByStatus(req, res) {
|
|
129
|
-
try {
|
|
130
|
-
const status = req.params?.status || this.input('status', 'pending');
|
|
131
|
-
|
|
132
|
-
if (!['pending', 'processing', 'completed', 'failed'].includes(status)) {
|
|
133
|
-
return this.json(res, {
|
|
134
|
-
success: false,
|
|
135
|
-
error: 'Invalid status. Use: pending, processing, completed, or failed'
|
|
136
|
-
}, 400);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const jobs = this.jobModel.getJobsByStatus(status);
|
|
140
|
-
|
|
141
|
-
this.json(res, {
|
|
142
|
-
success: true,
|
|
143
|
-
count: jobs.length,
|
|
144
|
-
data: jobs
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
} catch (error) {
|
|
148
|
-
this.json(res, {
|
|
149
|
-
success: false,
|
|
150
|
-
error: error.message
|
|
151
|
-
}, 500);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Reiniciar el procesador de colas
|
|
156
|
-
async restartQueueProcessor(req, res) {
|
|
157
|
-
try {
|
|
158
|
-
queueProcessor.stop();
|
|
159
|
-
await this.delay(1000); // Esperar un segundo
|
|
160
|
-
queueProcessor.start();
|
|
161
|
-
|
|
162
|
-
this.json(res, {
|
|
163
|
-
success: true,
|
|
164
|
-
message: 'Queue processor restarted successfully'
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
} catch (error) {
|
|
168
|
-
this.json(res, {
|
|
169
|
-
success: false,
|
|
170
|
-
error: error.message
|
|
171
|
-
}, 500);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Método de utilidad para crear un delay
|
|
176
|
-
delay(ms) {
|
|
177
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Instanciar el controlador
|
|
182
|
-
const controllerInstance = new QueueController();
|
|
183
|
-
|
|
184
|
-
// Exportar métodos individualmente
|
|
185
|
-
module.exports = {
|
|
186
|
-
addToQueue: (req, res) => {
|
|
187
|
-
controllerInstance.setRequestResponse(req, res);
|
|
188
|
-
controllerInstance.addToQueue(req, res);
|
|
189
|
-
},
|
|
190
|
-
getJobStatus: (req, res) => {
|
|
191
|
-
controllerInstance.setRequestResponse(req, res);
|
|
192
|
-
controllerInstance.getJobStatus(req, res);
|
|
193
|
-
},
|
|
194
|
-
getQueueStats: (req, res) => {
|
|
195
|
-
controllerInstance.setRequestResponse(req, res);
|
|
196
|
-
controllerInstance.getQueueStats(req, res);
|
|
197
|
-
},
|
|
198
|
-
getJobsByStatus: (req, res) => {
|
|
199
|
-
controllerInstance.setRequestResponse(req, res);
|
|
200
|
-
controllerInstance.getJobsByStatus(req, res);
|
|
201
|
-
},
|
|
202
|
-
restartQueueProcessor: (req, res) => {
|
|
203
|
-
controllerInstance.setRequestResponse(req, res);
|
|
204
|
-
controllerInstance.restartQueueProcessor(req, res);
|
|
205
|
-
}
|
|
206
|
-
};
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
const { ControllerBase } = require('insitu-js');
|
|
2
|
-
const QueueJobModel = require('../models/QueueJobModel');
|
|
3
|
-
const { queueProcessor } = require('../utils/queueProcessor');
|
|
4
|
-
|
|
5
|
-
class QwenQueueController extends ControllerBase {
|
|
6
|
-
constructor(options = {}) {
|
|
7
|
-
super(options);
|
|
8
|
-
// Usar la instancia global del modelo de cola
|
|
9
|
-
const QueueJobModel = require('../models/QueueJobModel');
|
|
10
|
-
this.jobModel = QueueJobModel;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// Añadir un trabajo de Qwen a la cola
|
|
14
|
-
async processWithQwenQueue(req, res) {
|
|
15
|
-
try {
|
|
16
|
-
let requestData = {};
|
|
17
|
-
|
|
18
|
-
if (req.body) {
|
|
19
|
-
if (typeof req.body === 'string') {
|
|
20
|
-
requestData = JSON.parse(req.body);
|
|
21
|
-
} else {
|
|
22
|
-
requestData = req.body;
|
|
23
|
-
}
|
|
24
|
-
} else {
|
|
25
|
-
let body = '';
|
|
26
|
-
for await (const chunk of req) {
|
|
27
|
-
body += chunk.toString();
|
|
28
|
-
}
|
|
29
|
-
requestData = JSON.parse(body);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Validar que existan las secciones requeridas
|
|
33
|
-
if (!requestData.data && !requestData.metrics) {
|
|
34
|
-
return this.json(res, {
|
|
35
|
-
success: false,
|
|
36
|
-
error: 'Missing data or metrics section in request'
|
|
37
|
-
}, 400);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (!requestData.prompt) {
|
|
41
|
-
return this.json(res, {
|
|
42
|
-
success: false,
|
|
43
|
-
error: 'Missing prompt section in request'
|
|
44
|
-
}, 400);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Preparar el payload para el trabajo
|
|
48
|
-
const payload = {
|
|
49
|
-
data: requestData.data || requestData.metrics,
|
|
50
|
-
prompt: requestData.prompt,
|
|
51
|
-
userId: requestData.userId || null,
|
|
52
|
-
requestId: Date.now()
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// Crear el trabajo en la cola de Qwen
|
|
56
|
-
const jobData = {
|
|
57
|
-
queue: 'qwen',
|
|
58
|
-
payload: payload,
|
|
59
|
-
priority: requestData.priority || 0,
|
|
60
|
-
max_attempts: requestData.max_attempts || 3
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const job = await this.jobModel.createJob(jobData);
|
|
64
|
-
|
|
65
|
-
this.json(res, {
|
|
66
|
-
success: true,
|
|
67
|
-
data: {
|
|
68
|
-
jobId: job.id,
|
|
69
|
-
queue: job.queue,
|
|
70
|
-
status: job.status,
|
|
71
|
-
message: 'Qwen job added to queue successfully'
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
} catch (error) {
|
|
76
|
-
this.json(res, {
|
|
77
|
-
success: false,
|
|
78
|
-
error: error.message
|
|
79
|
-
}, 500);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Consultar el resultado de un trabajo de Qwen
|
|
84
|
-
async getQwenResult(req, res) {
|
|
85
|
-
try {
|
|
86
|
-
const jobId = req.params?.id || this.input('id', null);
|
|
87
|
-
|
|
88
|
-
if (!jobId) {
|
|
89
|
-
return this.json(res, {
|
|
90
|
-
success: false,
|
|
91
|
-
error: 'Job ID is required'
|
|
92
|
-
}, 400);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const jobStatus = await this.jobModel.getJobStatus(jobId);
|
|
96
|
-
|
|
97
|
-
if (!jobStatus) {
|
|
98
|
-
return this.json(res, {
|
|
99
|
-
success: false,
|
|
100
|
-
error: 'Job not found'
|
|
101
|
-
}, 404);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Solo devolver el resultado si el trabajo está completado
|
|
105
|
-
if (jobStatus.status === 'completed') {
|
|
106
|
-
this.json(res, {
|
|
107
|
-
success: true,
|
|
108
|
-
data: {
|
|
109
|
-
jobId: jobStatus.id,
|
|
110
|
-
status: jobStatus.status,
|
|
111
|
-
result: jobStatus.result,
|
|
112
|
-
createdAt: jobStatus.created_at,
|
|
113
|
-
completedAt: jobStatus.updated_at
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
} else if (jobStatus.status === 'failed') {
|
|
117
|
-
this.json(res, {
|
|
118
|
-
success: false,
|
|
119
|
-
error: 'Job failed',
|
|
120
|
-
data: {
|
|
121
|
-
jobId: jobStatus.id,
|
|
122
|
-
status: jobStatus.status,
|
|
123
|
-
error: jobStatus.error,
|
|
124
|
-
attempts: jobStatus.attempts
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
} else {
|
|
128
|
-
// El trabajo aún está pendiente o en proceso
|
|
129
|
-
this.json(res, {
|
|
130
|
-
success: true,
|
|
131
|
-
data: {
|
|
132
|
-
jobId: jobStatus.id,
|
|
133
|
-
status: jobStatus.status,
|
|
134
|
-
message: `Job is ${jobStatus.status}, please check again later`,
|
|
135
|
-
attempts: jobStatus.attempts,
|
|
136
|
-
createdAt: jobStatus.created_at
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
} catch (error) {
|
|
142
|
-
this.json(res, {
|
|
143
|
-
success: false,
|
|
144
|
-
error: error.message
|
|
145
|
-
}, 500);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Añadir un manejador personalizado para la cola de Qwen
|
|
150
|
-
async initializeQwenHandler() {
|
|
151
|
-
// Registrar un manejador personalizado para la cola de Qwen
|
|
152
|
-
queueProcessor.registerHandler('qwen', async (payload) => {
|
|
153
|
-
try {
|
|
154
|
-
// Importar exec aquí para evitar problemas de dependencias
|
|
155
|
-
const { exec } = require('child_process');
|
|
156
|
-
const util = require('util');
|
|
157
|
-
const execAsync = util.promisify(exec);
|
|
158
|
-
|
|
159
|
-
// Preparar el comando para Qwen
|
|
160
|
-
const dataString = JSON.stringify(payload.data).replace(/"/g, '\\"');
|
|
161
|
-
const qwenCommand = `qwen -p "${payload.prompt} ${dataString}"`;
|
|
162
|
-
|
|
163
|
-
// Ejecutar el comando de Qwen
|
|
164
|
-
const result = await execAsync(qwenCommand);
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
success: true,
|
|
168
|
-
response: result.stdout,
|
|
169
|
-
command: qwenCommand,
|
|
170
|
-
userId: payload.userId,
|
|
171
|
-
requestId: payload.requestId
|
|
172
|
-
};
|
|
173
|
-
} catch (error) {
|
|
174
|
-
console.error('Error executing Qwen command:', error);
|
|
175
|
-
throw new Error(`Qwen execution failed: ${error.message}`);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Instanciar el controlador
|
|
182
|
-
const controllerInstance = new QwenQueueController();
|
|
183
|
-
|
|
184
|
-
// Inicializar el manejador de Qwen
|
|
185
|
-
controllerInstance.initializeQwenHandler();
|
|
186
|
-
|
|
187
|
-
// Exportar métodos individualmente
|
|
188
|
-
module.exports = {
|
|
189
|
-
processWithQwenQueue: (req, res) => {
|
|
190
|
-
controllerInstance.setRequestResponse(req, res);
|
|
191
|
-
controllerInstance.processWithQwenQueue(req, res);
|
|
192
|
-
},
|
|
193
|
-
getQwenResult: (req, res) => {
|
|
194
|
-
controllerInstance.setRequestResponse(req, res);
|
|
195
|
-
controllerInstance.getQwenResult(req, res);
|
|
196
|
-
}
|
|
197
|
-
};
|
|
File without changes
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Controlador para obtener sesiones únicas de eventos no finalizados
|
|
3
|
-
* EventsNoFinishController.js
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const { ControllerBase } = require('insitu-js');
|
|
7
|
-
const EventsNoFinishModel = require('../../models/tracking/EventsNoFinishModel');
|
|
8
|
-
|
|
9
|
-
class EventsNoFinishController extends ControllerBase {
|
|
10
|
-
constructor(options = {}) {
|
|
11
|
-
super(options);
|
|
12
|
-
|
|
13
|
-
// Inicializar modelo
|
|
14
|
-
this.model = new EventsNoFinishModel();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Endpoint para obtener sesiones únicas de eventos no finalizados
|
|
19
|
-
* GET /api/events-no-finish/sessions
|
|
20
|
-
*/
|
|
21
|
-
async getUniqueSessions(req, res) {
|
|
22
|
-
// Verificar si la respuesta ya ha sido enviada
|
|
23
|
-
if (res.headersSent) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
// Obtener parámetros de consulta
|
|
29
|
-
const queryParams = { ...req.query };
|
|
30
|
-
|
|
31
|
-
// Extraer parámetros de paginación
|
|
32
|
-
const offset = parseInt(queryParams.offset) || 0;
|
|
33
|
-
const limit = parseInt(queryParams.limit) || 10;
|
|
34
|
-
const pagination = { offset, limit };
|
|
35
|
-
|
|
36
|
-
// Obtener otros parámetros de filtro excluyendo los de paginación
|
|
37
|
-
const filters = {};
|
|
38
|
-
for (const [key, value] of Object.entries(queryParams)) {
|
|
39
|
-
if (!['offset', 'limit', 'sort', 'order'].includes(key)) {
|
|
40
|
-
if (value !== '') { // Solo añadir filtros que no estén vacíos
|
|
41
|
-
filters[key] = value;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Obtener los resultados usando el modelo
|
|
47
|
-
const result = await this.model.getUniqueSessions(filters, pagination);
|
|
48
|
-
|
|
49
|
-
// Convertir BigInt a string para evitar problemas de serialización
|
|
50
|
-
const serializedResult = JSON.parse(JSON.stringify(result, (key, value) =>
|
|
51
|
-
typeof value === 'bigint' ? value.toString() : value
|
|
52
|
-
));
|
|
53
|
-
|
|
54
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
55
|
-
res.end(JSON.stringify(serializedResult));
|
|
56
|
-
} catch (error) {
|
|
57
|
-
console.error('Error en getUniqueSessions:', error);
|
|
58
|
-
if (!res.headersSent) {
|
|
59
|
-
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
60
|
-
res.end(JSON.stringify({
|
|
61
|
-
total: 0,
|
|
62
|
-
rows: [],
|
|
63
|
-
error: error.message
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Exportar métodos individualmente para que RouteLoader pueda acceder a ellos
|
|
71
|
-
const controllerInstance = new EventsNoFinishController();
|
|
72
|
-
|
|
73
|
-
module.exports = {
|
|
74
|
-
getUniqueSessions: (req, res) => {
|
|
75
|
-
controllerInstance.setRequestResponse(req, res);
|
|
76
|
-
controllerInstance.getUniqueSessions(req, res);
|
|
77
|
-
}
|
|
78
|
-
};
|