goldstars-services 1.0.69 → 1.0.71
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/dist/index.js +21 -0
- package/dist/models/reservation.model.js +2 -1
- package/dist/models/scheduleException.model.js +87 -0
- package/dist/models/user.model.js +32 -0
- package/dist/models/weeklyScheduleTemplate.model.js +73 -0
- package/dist/scripts/migrateInitialSchedules.js +331 -0
- package/dist/services/reservation.service.js +135 -42
- package/dist/services/scheduleException.service.js +288 -0
- package/dist/services/userSuspension.service.js +253 -0
- package/dist/services/weeklyScheduleTemplate.service.js +226 -0
- package/package.json +1 -1
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.updateSuspension = exports.unsuspendUser = exports.suspendUser = exports.getSuspendedUsers = exports.default = exports.checkUserSuspension = void 0;
|
|
7
|
+
var _userModel = _interopRequireDefault(require("../models/user.model.js"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
10
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
11
|
+
/**
|
|
12
|
+
* Suspender un usuario
|
|
13
|
+
* @param {String} userId - ID del usuario a suspender
|
|
14
|
+
* @param {Object} suspensionData - Datos de suspensión
|
|
15
|
+
* @returns {Object} Usuario actualizado
|
|
16
|
+
*/
|
|
17
|
+
var suspendUser = exports.suspendUser = /*#__PURE__*/function () {
|
|
18
|
+
var _ref = _asyncToGenerator(function* (userId, suspensionData) {
|
|
19
|
+
try {
|
|
20
|
+
var {
|
|
21
|
+
reason,
|
|
22
|
+
suspendedUntil,
|
|
23
|
+
suspendedBy,
|
|
24
|
+
allowedServices
|
|
25
|
+
} = suspensionData;
|
|
26
|
+
if (!reason || reason.trim() === '') {
|
|
27
|
+
throw new Error('La razón de suspensión es requerida');
|
|
28
|
+
}
|
|
29
|
+
if (!suspendedBy) {
|
|
30
|
+
throw new Error('El ID del administrador que suspende es requerido');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Validar allowedServices si se proporciona
|
|
34
|
+
var validServices = ['bikes', 'gym', 'events'];
|
|
35
|
+
if (allowedServices) {
|
|
36
|
+
for (var service of allowedServices) {
|
|
37
|
+
if (!validServices.includes(service)) {
|
|
38
|
+
throw new Error("Servicio inv\xE1lido: ".concat(service, ". Debe ser: ").concat(validServices.join(', ')));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
var user = yield _userModel.default.findById(userId);
|
|
43
|
+
if (!user) {
|
|
44
|
+
throw new Error('Usuario no encontrado');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Crear objeto de suspensión
|
|
48
|
+
var suspensionStatus = {
|
|
49
|
+
isSuspended: true,
|
|
50
|
+
suspendedAt: new Date(),
|
|
51
|
+
suspendedBy,
|
|
52
|
+
reason: reason.trim(),
|
|
53
|
+
suspendedUntil: suspendedUntil ? new Date(suspendedUntil) : null,
|
|
54
|
+
allowedServices: allowedServices || []
|
|
55
|
+
};
|
|
56
|
+
user.suspensionStatus = suspensionStatus;
|
|
57
|
+
yield user.save();
|
|
58
|
+
return user;
|
|
59
|
+
} catch (error) {
|
|
60
|
+
throw new Error("Error al suspender usuario: ".concat(error.message));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return function suspendUser(_x, _x2) {
|
|
64
|
+
return _ref.apply(this, arguments);
|
|
65
|
+
};
|
|
66
|
+
}();
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Levantar suspensión de un usuario
|
|
70
|
+
* @param {String} userId - ID del usuario
|
|
71
|
+
* @returns {Object} Usuario actualizado
|
|
72
|
+
*/
|
|
73
|
+
var unsuspendUser = exports.unsuspendUser = /*#__PURE__*/function () {
|
|
74
|
+
var _ref2 = _asyncToGenerator(function* (userId) {
|
|
75
|
+
try {
|
|
76
|
+
var user = yield _userModel.default.findById(userId);
|
|
77
|
+
if (!user) {
|
|
78
|
+
throw new Error('Usuario no encontrado');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Resetear suspensión
|
|
82
|
+
user.suspensionStatus = null;
|
|
83
|
+
yield user.save();
|
|
84
|
+
return user;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
throw new Error("Error al levantar suspensi\xF3n: ".concat(error.message));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
return function unsuspendUser(_x3) {
|
|
90
|
+
return _ref2.apply(this, arguments);
|
|
91
|
+
};
|
|
92
|
+
}();
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Verificar si un usuario está suspendido para un servicio
|
|
96
|
+
* Auto-levanta la suspensión si ya expiró
|
|
97
|
+
* @param {String} userId - ID del usuario
|
|
98
|
+
* @param {String} serviceType - Tipo de servicio ('bikes', 'gym', 'events')
|
|
99
|
+
* @returns {Object} { isSuspended: Boolean, reason: String, suspendedUntil: Date }
|
|
100
|
+
*/
|
|
101
|
+
var checkUserSuspension = exports.checkUserSuspension = /*#__PURE__*/function () {
|
|
102
|
+
var _ref3 = _asyncToGenerator(function* (userId) {
|
|
103
|
+
var serviceType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'bikes';
|
|
104
|
+
try {
|
|
105
|
+
var user = yield _userModel.default.findById(userId);
|
|
106
|
+
if (!user) {
|
|
107
|
+
throw new Error('Usuario no encontrado');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Si no tiene suspensión, retornar no suspendido
|
|
111
|
+
if (!user.suspensionStatus || !user.suspensionStatus.isSuspended) {
|
|
112
|
+
return {
|
|
113
|
+
isSuspended: false,
|
|
114
|
+
reason: null,
|
|
115
|
+
suspendedUntil: null
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
var suspension = user.suspensionStatus;
|
|
119
|
+
|
|
120
|
+
// Verificar si la suspensión ya expiró
|
|
121
|
+
if (suspension.suspendedUntil && new Date() > new Date(suspension.suspendedUntil)) {
|
|
122
|
+
// Auto-levantar suspensión
|
|
123
|
+
user.suspensionStatus = null;
|
|
124
|
+
yield user.save();
|
|
125
|
+
return {
|
|
126
|
+
isSuspended: false,
|
|
127
|
+
reason: null,
|
|
128
|
+
suspendedUntil: null
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Verificar si el servicio está en los permitidos
|
|
133
|
+
var isServiceAllowed = suspension.allowedServices && suspension.allowedServices.includes(serviceType);
|
|
134
|
+
if (isServiceAllowed) {
|
|
135
|
+
// Servicio permitido a pesar de suspensión
|
|
136
|
+
return {
|
|
137
|
+
isSuspended: false,
|
|
138
|
+
reason: null,
|
|
139
|
+
suspendedUntil: null
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Usuario está suspendido para este servicio
|
|
144
|
+
return {
|
|
145
|
+
isSuspended: true,
|
|
146
|
+
reason: suspension.reason,
|
|
147
|
+
suspendedUntil: suspension.suspendedUntil,
|
|
148
|
+
suspendedAt: suspension.suspendedAt
|
|
149
|
+
};
|
|
150
|
+
} catch (error) {
|
|
151
|
+
throw new Error("Error al verificar suspensi\xF3n: ".concat(error.message));
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
return function checkUserSuspension(_x4) {
|
|
155
|
+
return _ref3.apply(this, arguments);
|
|
156
|
+
};
|
|
157
|
+
}();
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Obtener lista de usuarios suspendidos
|
|
161
|
+
* @param {Object} options - Opciones de filtro
|
|
162
|
+
* @returns {Array} Lista de usuarios suspendidos
|
|
163
|
+
*/
|
|
164
|
+
var getSuspendedUsers = exports.getSuspendedUsers = /*#__PURE__*/function () {
|
|
165
|
+
var _ref4 = _asyncToGenerator(function* () {
|
|
166
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
167
|
+
try {
|
|
168
|
+
var query = {
|
|
169
|
+
'suspensionStatus.isSuspended': true
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// Filtrar por servicio si se proporciona
|
|
173
|
+
if (options.serviceType) {
|
|
174
|
+
query['suspensionStatus.allowedServices'] = {
|
|
175
|
+
$ne: options.serviceType
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
var users = yield _userModel.default.find(query).select('firstName lastName email suspensionStatus').populate('suspensionStatus.suspendedBy', 'firstName lastName email').sort({
|
|
179
|
+
'suspensionStatus.suspendedAt': -1
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Filtrar usuarios cuya suspensión ya expiró
|
|
183
|
+
var now = new Date();
|
|
184
|
+
var activelyeSuspended = users.filter(user => {
|
|
185
|
+
if (!user.suspensionStatus.suspendedUntil) {
|
|
186
|
+
return true; // Suspensión indefinida
|
|
187
|
+
}
|
|
188
|
+
return new Date(user.suspensionStatus.suspendedUntil) > now;
|
|
189
|
+
});
|
|
190
|
+
return activelyeSuspended;
|
|
191
|
+
} catch (error) {
|
|
192
|
+
throw new Error("Error al obtener usuarios suspendidos: ".concat(error.message));
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return function getSuspendedUsers() {
|
|
196
|
+
return _ref4.apply(this, arguments);
|
|
197
|
+
};
|
|
198
|
+
}();
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Actualizar datos de suspensión de un usuario
|
|
202
|
+
* @param {String} userId - ID del usuario
|
|
203
|
+
* @param {Object} updateData - Datos a actualizar
|
|
204
|
+
* @returns {Object} Usuario actualizado
|
|
205
|
+
*/
|
|
206
|
+
var updateSuspension = exports.updateSuspension = /*#__PURE__*/function () {
|
|
207
|
+
var _ref5 = _asyncToGenerator(function* (userId, updateData) {
|
|
208
|
+
try {
|
|
209
|
+
var user = yield _userModel.default.findById(userId);
|
|
210
|
+
if (!user) {
|
|
211
|
+
throw new Error('Usuario no encontrado');
|
|
212
|
+
}
|
|
213
|
+
if (!user.suspensionStatus || !user.suspensionStatus.isSuspended) {
|
|
214
|
+
throw new Error('El usuario no está suspendido');
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Validar allowedServices si se actualiza
|
|
218
|
+
if (updateData.allowedServices) {
|
|
219
|
+
var validServices = ['bikes', 'gym', 'events'];
|
|
220
|
+
for (var service of updateData.allowedServices) {
|
|
221
|
+
if (!validServices.includes(service)) {
|
|
222
|
+
throw new Error("Servicio inv\xE1lido: ".concat(service));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Actualizar campos permitidos
|
|
228
|
+
if (updateData.reason) {
|
|
229
|
+
user.suspensionStatus.reason = updateData.reason;
|
|
230
|
+
}
|
|
231
|
+
if (updateData.suspendedUntil !== undefined) {
|
|
232
|
+
user.suspensionStatus.suspendedUntil = updateData.suspendedUntil ? new Date(updateData.suspendedUntil) : null;
|
|
233
|
+
}
|
|
234
|
+
if (updateData.allowedServices !== undefined) {
|
|
235
|
+
user.suspensionStatus.allowedServices = updateData.allowedServices;
|
|
236
|
+
}
|
|
237
|
+
yield user.save();
|
|
238
|
+
return user;
|
|
239
|
+
} catch (error) {
|
|
240
|
+
throw new Error("Error al actualizar suspensi\xF3n: ".concat(error.message));
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
return function updateSuspension(_x5, _x6) {
|
|
244
|
+
return _ref5.apply(this, arguments);
|
|
245
|
+
};
|
|
246
|
+
}();
|
|
247
|
+
var _default = exports.default = {
|
|
248
|
+
suspendUser,
|
|
249
|
+
unsuspendUser,
|
|
250
|
+
checkUserSuspension,
|
|
251
|
+
getSuspendedUsers,
|
|
252
|
+
updateSuspension
|
|
253
|
+
};
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.upsertWeeklySchedule = exports.updateTimeSlots = exports.toggleWeeklyScheduleStatus = exports.getWeeklyScheduleForDay = exports.getWeeklyScheduleByLocation = exports.getAllWeeklySchedules = exports.deleteWeeklySchedule = exports.default = void 0;
|
|
7
|
+
var _weeklyScheduleTemplateModel = _interopRequireDefault(require("../models/weeklyScheduleTemplate.model.js"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
10
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
11
|
+
/**
|
|
12
|
+
* Crear o actualizar un template de horario semanal
|
|
13
|
+
* @param {String} location - Ubicación ('C.C Las Virtudes' | 'Sambil Paraguaná')
|
|
14
|
+
* @param {Number} dayOfWeek - Día de la semana (1-5, Lunes-Viernes)
|
|
15
|
+
* @param {Array} timeSlots - Array de slots [{time: String, isActive: Boolean, maxCapacity: Number}]
|
|
16
|
+
* @returns {Object} Template creado o actualizado
|
|
17
|
+
*/
|
|
18
|
+
var upsertWeeklySchedule = exports.upsertWeeklySchedule = /*#__PURE__*/function () {
|
|
19
|
+
var _ref = _asyncToGenerator(function* (location, dayOfWeek, timeSlots) {
|
|
20
|
+
try {
|
|
21
|
+
// Validar dayOfWeek
|
|
22
|
+
if (dayOfWeek < 1 || dayOfWeek > 5) {
|
|
23
|
+
throw new Error('dayOfWeek debe estar entre 1 (Lunes) y 5 (Viernes)');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Validar que location sea válida
|
|
27
|
+
var validLocations = ['C.C Las Virtudes', 'Sambil Paraguaná'];
|
|
28
|
+
if (!validLocations.includes(location)) {
|
|
29
|
+
throw new Error("Ubicaci\xF3n inv\xE1lida. Debe ser: ".concat(validLocations.join(' o ')));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Validar formato de timeSlots
|
|
33
|
+
var timeRegex = /^(1[0-2]|[1-9])(:([0-5][0-9]))?(am|pm)$/i;
|
|
34
|
+
for (var slot of timeSlots) {
|
|
35
|
+
if (!timeRegex.test(slot.time)) {
|
|
36
|
+
throw new Error("Formato de hora inv\xE1lido: ".concat(slot.time, ". Use formato como: 7am, 8:30am, 5pm"));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
var schedule = yield _weeklyScheduleTemplateModel.default.findOneAndUpdate({
|
|
40
|
+
location,
|
|
41
|
+
dayOfWeek
|
|
42
|
+
}, {
|
|
43
|
+
location,
|
|
44
|
+
dayOfWeek,
|
|
45
|
+
timeSlots,
|
|
46
|
+
isActive: true,
|
|
47
|
+
updatedAt: new Date()
|
|
48
|
+
}, {
|
|
49
|
+
upsert: true,
|
|
50
|
+
new: true,
|
|
51
|
+
runValidators: true
|
|
52
|
+
});
|
|
53
|
+
return schedule;
|
|
54
|
+
} catch (error) {
|
|
55
|
+
throw new Error("Error al crear/actualizar horario semanal: ".concat(error.message));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return function upsertWeeklySchedule(_x, _x2, _x3) {
|
|
59
|
+
return _ref.apply(this, arguments);
|
|
60
|
+
};
|
|
61
|
+
}();
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Obtener todos los templates de horario para una ubicación
|
|
65
|
+
* @param {String} location - Ubicación
|
|
66
|
+
* @returns {Array} Templates de horarios
|
|
67
|
+
*/
|
|
68
|
+
var getWeeklyScheduleByLocation = exports.getWeeklyScheduleByLocation = /*#__PURE__*/function () {
|
|
69
|
+
var _ref2 = _asyncToGenerator(function* (location) {
|
|
70
|
+
try {
|
|
71
|
+
var schedules = yield _weeklyScheduleTemplateModel.default.find({
|
|
72
|
+
location,
|
|
73
|
+
isActive: true
|
|
74
|
+
}).sort({
|
|
75
|
+
dayOfWeek: 1
|
|
76
|
+
});
|
|
77
|
+
return schedules;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
throw new Error("Error al obtener horarios por ubicaci\xF3n: ".concat(error.message));
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return function getWeeklyScheduleByLocation(_x4) {
|
|
83
|
+
return _ref2.apply(this, arguments);
|
|
84
|
+
};
|
|
85
|
+
}();
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Obtener template de horario para un día específico
|
|
89
|
+
* @param {String} location - Ubicación
|
|
90
|
+
* @param {Number} dayOfWeek - Día de la semana (1-5)
|
|
91
|
+
* @returns {Object|null} Template de horario o null
|
|
92
|
+
*/
|
|
93
|
+
var getWeeklyScheduleForDay = exports.getWeeklyScheduleForDay = /*#__PURE__*/function () {
|
|
94
|
+
var _ref3 = _asyncToGenerator(function* (location, dayOfWeek) {
|
|
95
|
+
try {
|
|
96
|
+
var schedule = yield _weeklyScheduleTemplateModel.default.findOne({
|
|
97
|
+
location,
|
|
98
|
+
dayOfWeek,
|
|
99
|
+
isActive: true
|
|
100
|
+
});
|
|
101
|
+
return schedule;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
throw new Error("Error al obtener horario para el d\xEDa: ".concat(error.message));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return function getWeeklyScheduleForDay(_x5, _x6) {
|
|
107
|
+
return _ref3.apply(this, arguments);
|
|
108
|
+
};
|
|
109
|
+
}();
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Obtener todos los templates de horario (admin)
|
|
113
|
+
* @returns {Array} Todos los templates
|
|
114
|
+
*/
|
|
115
|
+
var getAllWeeklySchedules = exports.getAllWeeklySchedules = /*#__PURE__*/function () {
|
|
116
|
+
var _ref4 = _asyncToGenerator(function* () {
|
|
117
|
+
try {
|
|
118
|
+
var schedules = yield _weeklyScheduleTemplateModel.default.find({}).sort({
|
|
119
|
+
location: 1,
|
|
120
|
+
dayOfWeek: 1
|
|
121
|
+
});
|
|
122
|
+
return schedules;
|
|
123
|
+
} catch (error) {
|
|
124
|
+
throw new Error("Error al obtener todos los horarios: ".concat(error.message));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return function getAllWeeklySchedules() {
|
|
128
|
+
return _ref4.apply(this, arguments);
|
|
129
|
+
};
|
|
130
|
+
}();
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Eliminar un template de horario
|
|
134
|
+
* @param {String} scheduleId - ID del template
|
|
135
|
+
* @returns {Object} Template eliminado
|
|
136
|
+
*/
|
|
137
|
+
var deleteWeeklySchedule = exports.deleteWeeklySchedule = /*#__PURE__*/function () {
|
|
138
|
+
var _ref5 = _asyncToGenerator(function* (scheduleId) {
|
|
139
|
+
try {
|
|
140
|
+
var schedule = yield _weeklyScheduleTemplateModel.default.findByIdAndDelete(scheduleId);
|
|
141
|
+
if (!schedule) {
|
|
142
|
+
throw new Error('Template de horario no encontrado');
|
|
143
|
+
}
|
|
144
|
+
return schedule;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
throw new Error("Error al eliminar horario: ".concat(error.message));
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return function deleteWeeklySchedule(_x7) {
|
|
150
|
+
return _ref5.apply(this, arguments);
|
|
151
|
+
};
|
|
152
|
+
}();
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Activar/desactivar un template de horario
|
|
156
|
+
* @param {String} scheduleId - ID del template
|
|
157
|
+
* @param {Boolean} isActive - Estado de activación
|
|
158
|
+
* @returns {Object} Template actualizado
|
|
159
|
+
*/
|
|
160
|
+
var toggleWeeklyScheduleStatus = exports.toggleWeeklyScheduleStatus = /*#__PURE__*/function () {
|
|
161
|
+
var _ref6 = _asyncToGenerator(function* (scheduleId, isActive) {
|
|
162
|
+
try {
|
|
163
|
+
var schedule = yield _weeklyScheduleTemplateModel.default.findByIdAndUpdate(scheduleId, {
|
|
164
|
+
isActive,
|
|
165
|
+
updatedAt: new Date()
|
|
166
|
+
}, {
|
|
167
|
+
new: true,
|
|
168
|
+
runValidators: true
|
|
169
|
+
});
|
|
170
|
+
if (!schedule) {
|
|
171
|
+
throw new Error('Template de horario no encontrado');
|
|
172
|
+
}
|
|
173
|
+
return schedule;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
throw new Error("Error al cambiar estado del horario: ".concat(error.message));
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
return function toggleWeeklyScheduleStatus(_x8, _x9) {
|
|
179
|
+
return _ref6.apply(this, arguments);
|
|
180
|
+
};
|
|
181
|
+
}();
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Actualizar slots específicos de un template
|
|
185
|
+
* @param {String} scheduleId - ID del template
|
|
186
|
+
* @param {Array} timeSlots - Nuevos slots
|
|
187
|
+
* @returns {Object} Template actualizado
|
|
188
|
+
*/
|
|
189
|
+
var updateTimeSlots = exports.updateTimeSlots = /*#__PURE__*/function () {
|
|
190
|
+
var _ref7 = _asyncToGenerator(function* (scheduleId, timeSlots) {
|
|
191
|
+
try {
|
|
192
|
+
// Validar formato de timeSlots
|
|
193
|
+
var timeRegex = /^(1[0-2]|[1-9])(:([0-5][0-9]))?(am|pm)$/i;
|
|
194
|
+
for (var slot of timeSlots) {
|
|
195
|
+
if (!timeRegex.test(slot.time)) {
|
|
196
|
+
throw new Error("Formato de hora inv\xE1lido: ".concat(slot.time, ". Use formato como: 7am, 8:30am, 5pm"));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
var schedule = yield _weeklyScheduleTemplateModel.default.findByIdAndUpdate(scheduleId, {
|
|
200
|
+
timeSlots,
|
|
201
|
+
updatedAt: new Date()
|
|
202
|
+
}, {
|
|
203
|
+
new: true,
|
|
204
|
+
runValidators: true
|
|
205
|
+
});
|
|
206
|
+
if (!schedule) {
|
|
207
|
+
throw new Error('Template de horario no encontrado');
|
|
208
|
+
}
|
|
209
|
+
return schedule;
|
|
210
|
+
} catch (error) {
|
|
211
|
+
throw new Error("Error al actualizar slots: ".concat(error.message));
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
return function updateTimeSlots(_x10, _x11) {
|
|
215
|
+
return _ref7.apply(this, arguments);
|
|
216
|
+
};
|
|
217
|
+
}();
|
|
218
|
+
var _default = exports.default = {
|
|
219
|
+
upsertWeeklySchedule,
|
|
220
|
+
getWeeklyScheduleByLocation,
|
|
221
|
+
getWeeklyScheduleForDay,
|
|
222
|
+
getAllWeeklySchedules,
|
|
223
|
+
deleteWeeklySchedule,
|
|
224
|
+
toggleWeeklyScheduleStatus,
|
|
225
|
+
updateTimeSlots
|
|
226
|
+
};
|