@blackcode_sa/metaestetics-api 1.14.28 → 1.14.29
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/admin/index.js
CHANGED
|
@@ -11188,17 +11188,27 @@ var BookingAdmin = class {
|
|
|
11188
11188
|
startTime: start.toDate().toISOString(),
|
|
11189
11189
|
endTime: end.toDate().toISOString()
|
|
11190
11190
|
});
|
|
11191
|
-
const MAX_EVENT_DURATION_MS = 24 * 60 * 60 * 1e3;
|
|
11191
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
11192
11192
|
const queryStart = admin16.firestore.Timestamp.fromMillis(
|
|
11193
11193
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
11194
11194
|
);
|
|
11195
|
-
const eventsRef = this.db.collection(`clinics/${clinicId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "
|
|
11195
|
+
const eventsRef = this.db.collection(`clinics/${clinicId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "<=", end).orderBy("eventTime.start");
|
|
11196
11196
|
const snapshot = await eventsRef.get();
|
|
11197
11197
|
const events = snapshot.docs.map((doc3) => ({
|
|
11198
11198
|
...doc3.data(),
|
|
11199
11199
|
id: doc3.id
|
|
11200
11200
|
})).filter((event) => {
|
|
11201
|
-
|
|
11201
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
11202
|
+
if (!overlaps) {
|
|
11203
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping event", {
|
|
11204
|
+
eventId: event.id,
|
|
11205
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
11206
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
11207
|
+
queryStart: start.toDate().toISOString(),
|
|
11208
|
+
queryEnd: end.toDate().toISOString()
|
|
11209
|
+
});
|
|
11210
|
+
}
|
|
11211
|
+
return overlaps;
|
|
11202
11212
|
});
|
|
11203
11213
|
Logger.debug("[BookingAdmin] Retrieved clinic calendar events", {
|
|
11204
11214
|
clinicId,
|
|
@@ -11234,17 +11244,27 @@ var BookingAdmin = class {
|
|
|
11234
11244
|
startTime: start.toDate().toISOString(),
|
|
11235
11245
|
endTime: end.toDate().toISOString()
|
|
11236
11246
|
});
|
|
11237
|
-
const MAX_EVENT_DURATION_MS = 24 * 60 * 60 * 1e3;
|
|
11247
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
11238
11248
|
const queryStart = admin16.firestore.Timestamp.fromMillis(
|
|
11239
11249
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
11240
11250
|
);
|
|
11241
|
-
const eventsRef = this.db.collection(`practitioners/${practitionerId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "
|
|
11251
|
+
const eventsRef = this.db.collection(`practitioners/${practitionerId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "<=", end).orderBy("eventTime.start");
|
|
11242
11252
|
const snapshot = await eventsRef.get();
|
|
11243
11253
|
const events = snapshot.docs.map((doc3) => ({
|
|
11244
11254
|
...doc3.data(),
|
|
11245
11255
|
id: doc3.id
|
|
11246
11256
|
})).filter((event) => {
|
|
11247
|
-
|
|
11257
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
11258
|
+
if (!overlaps) {
|
|
11259
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping practitioner event", {
|
|
11260
|
+
eventId: event.id,
|
|
11261
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
11262
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
11263
|
+
queryStart: start.toDate().toISOString(),
|
|
11264
|
+
queryEnd: end.toDate().toISOString()
|
|
11265
|
+
});
|
|
11266
|
+
}
|
|
11267
|
+
return overlaps;
|
|
11248
11268
|
});
|
|
11249
11269
|
Logger.debug("[BookingAdmin] Retrieved practitioner calendar events", {
|
|
11250
11270
|
practitionerId,
|
package/dist/admin/index.mjs
CHANGED
|
@@ -11115,17 +11115,27 @@ var BookingAdmin = class {
|
|
|
11115
11115
|
startTime: start.toDate().toISOString(),
|
|
11116
11116
|
endTime: end.toDate().toISOString()
|
|
11117
11117
|
});
|
|
11118
|
-
const MAX_EVENT_DURATION_MS = 24 * 60 * 60 * 1e3;
|
|
11118
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
11119
11119
|
const queryStart = admin16.firestore.Timestamp.fromMillis(
|
|
11120
11120
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
11121
11121
|
);
|
|
11122
|
-
const eventsRef = this.db.collection(`clinics/${clinicId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "
|
|
11122
|
+
const eventsRef = this.db.collection(`clinics/${clinicId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "<=", end).orderBy("eventTime.start");
|
|
11123
11123
|
const snapshot = await eventsRef.get();
|
|
11124
11124
|
const events = snapshot.docs.map((doc3) => ({
|
|
11125
11125
|
...doc3.data(),
|
|
11126
11126
|
id: doc3.id
|
|
11127
11127
|
})).filter((event) => {
|
|
11128
|
-
|
|
11128
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
11129
|
+
if (!overlaps) {
|
|
11130
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping event", {
|
|
11131
|
+
eventId: event.id,
|
|
11132
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
11133
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
11134
|
+
queryStart: start.toDate().toISOString(),
|
|
11135
|
+
queryEnd: end.toDate().toISOString()
|
|
11136
|
+
});
|
|
11137
|
+
}
|
|
11138
|
+
return overlaps;
|
|
11129
11139
|
});
|
|
11130
11140
|
Logger.debug("[BookingAdmin] Retrieved clinic calendar events", {
|
|
11131
11141
|
clinicId,
|
|
@@ -11161,17 +11171,27 @@ var BookingAdmin = class {
|
|
|
11161
11171
|
startTime: start.toDate().toISOString(),
|
|
11162
11172
|
endTime: end.toDate().toISOString()
|
|
11163
11173
|
});
|
|
11164
|
-
const MAX_EVENT_DURATION_MS = 24 * 60 * 60 * 1e3;
|
|
11174
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
11165
11175
|
const queryStart = admin16.firestore.Timestamp.fromMillis(
|
|
11166
11176
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
11167
11177
|
);
|
|
11168
|
-
const eventsRef = this.db.collection(`practitioners/${practitionerId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "
|
|
11178
|
+
const eventsRef = this.db.collection(`practitioners/${practitionerId}/calendar`).where("eventTime.start", ">=", queryStart).where("eventTime.start", "<=", end).orderBy("eventTime.start");
|
|
11169
11179
|
const snapshot = await eventsRef.get();
|
|
11170
11180
|
const events = snapshot.docs.map((doc3) => ({
|
|
11171
11181
|
...doc3.data(),
|
|
11172
11182
|
id: doc3.id
|
|
11173
11183
|
})).filter((event) => {
|
|
11174
|
-
|
|
11184
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
11185
|
+
if (!overlaps) {
|
|
11186
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping practitioner event", {
|
|
11187
|
+
eventId: event.id,
|
|
11188
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
11189
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
11190
|
+
queryStart: start.toDate().toISOString(),
|
|
11191
|
+
queryEnd: end.toDate().toISOString()
|
|
11192
|
+
});
|
|
11193
|
+
}
|
|
11194
|
+
return overlaps;
|
|
11175
11195
|
});
|
|
11176
11196
|
Logger.debug("[BookingAdmin] Retrieved practitioner calendar events", {
|
|
11177
11197
|
practitionerId,
|
package/dist/index.js
CHANGED
|
@@ -16780,15 +16780,37 @@ async function searchCalendarEventsUtil(db, params) {
|
|
|
16780
16780
|
constraints.push((0, import_firestore45.where)("eventType", "==", filters.eventType));
|
|
16781
16781
|
}
|
|
16782
16782
|
if (filters.dateRange) {
|
|
16783
|
-
|
|
16783
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
16784
|
+
const extendedStart = import_firestore45.Timestamp.fromMillis(
|
|
16785
|
+
filters.dateRange.start.toMillis() - MAX_EVENT_DURATION_MS
|
|
16786
|
+
);
|
|
16787
|
+
constraints.push((0, import_firestore45.where)("eventTime.start", ">=", extendedStart));
|
|
16784
16788
|
constraints.push((0, import_firestore45.where)("eventTime.start", "<=", filters.dateRange.end));
|
|
16785
16789
|
}
|
|
16786
16790
|
try {
|
|
16787
16791
|
const finalQuery = (0, import_firestore45.query)(collectionRef, ...constraints);
|
|
16788
16792
|
const querySnapshot = await (0, import_firestore45.getDocs)(finalQuery);
|
|
16789
|
-
|
|
16793
|
+
let events = querySnapshot.docs.map(
|
|
16790
16794
|
(doc47) => ({ id: doc47.id, ...doc47.data() })
|
|
16791
16795
|
);
|
|
16796
|
+
if (filters.dateRange) {
|
|
16797
|
+
events = events.filter((event) => {
|
|
16798
|
+
const overlaps = event.eventTime.end.toMillis() > filters.dateRange.start.toMillis();
|
|
16799
|
+
if (!overlaps) {
|
|
16800
|
+
console.debug(
|
|
16801
|
+
`[searchCalendarEventsUtil] Filtered out non-overlapping event:`,
|
|
16802
|
+
{
|
|
16803
|
+
eventId: event.id,
|
|
16804
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
16805
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
16806
|
+
queryStart: filters.dateRange.start.toDate().toISOString(),
|
|
16807
|
+
queryEnd: filters.dateRange.end.toDate().toISOString()
|
|
16808
|
+
}
|
|
16809
|
+
);
|
|
16810
|
+
}
|
|
16811
|
+
return overlaps;
|
|
16812
|
+
});
|
|
16813
|
+
}
|
|
16792
16814
|
return events;
|
|
16793
16815
|
} catch (error) {
|
|
16794
16816
|
console.error("Error searching calendar events:", error);
|
package/dist/index.mjs
CHANGED
|
@@ -16926,15 +16926,37 @@ async function searchCalendarEventsUtil(db, params) {
|
|
|
16926
16926
|
constraints.push(where25("eventType", "==", filters.eventType));
|
|
16927
16927
|
}
|
|
16928
16928
|
if (filters.dateRange) {
|
|
16929
|
-
|
|
16929
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
16930
|
+
const extendedStart = Timestamp26.fromMillis(
|
|
16931
|
+
filters.dateRange.start.toMillis() - MAX_EVENT_DURATION_MS
|
|
16932
|
+
);
|
|
16933
|
+
constraints.push(where25("eventTime.start", ">=", extendedStart));
|
|
16930
16934
|
constraints.push(where25("eventTime.start", "<=", filters.dateRange.end));
|
|
16931
16935
|
}
|
|
16932
16936
|
try {
|
|
16933
16937
|
const finalQuery = query25(collectionRef, ...constraints);
|
|
16934
16938
|
const querySnapshot = await getDocs25(finalQuery);
|
|
16935
|
-
|
|
16939
|
+
let events = querySnapshot.docs.map(
|
|
16936
16940
|
(doc47) => ({ id: doc47.id, ...doc47.data() })
|
|
16937
16941
|
);
|
|
16942
|
+
if (filters.dateRange) {
|
|
16943
|
+
events = events.filter((event) => {
|
|
16944
|
+
const overlaps = event.eventTime.end.toMillis() > filters.dateRange.start.toMillis();
|
|
16945
|
+
if (!overlaps) {
|
|
16946
|
+
console.debug(
|
|
16947
|
+
`[searchCalendarEventsUtil] Filtered out non-overlapping event:`,
|
|
16948
|
+
{
|
|
16949
|
+
eventId: event.id,
|
|
16950
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
16951
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
16952
|
+
queryStart: filters.dateRange.start.toDate().toISOString(),
|
|
16953
|
+
queryEnd: filters.dateRange.end.toDate().toISOString()
|
|
16954
|
+
}
|
|
16955
|
+
);
|
|
16956
|
+
}
|
|
16957
|
+
return overlaps;
|
|
16958
|
+
});
|
|
16959
|
+
}
|
|
16938
16960
|
return events;
|
|
16939
16961
|
} catch (error) {
|
|
16940
16962
|
console.error("Error searching calendar events:", error);
|
package/package.json
CHANGED
|
@@ -339,26 +339,44 @@ export class BookingAdmin {
|
|
|
339
339
|
endTime: end.toDate().toISOString(),
|
|
340
340
|
});
|
|
341
341
|
|
|
342
|
-
|
|
342
|
+
// Increased to 30 days to handle long blocking events (e.g., holidays, extended time off)
|
|
343
|
+
// This ensures we catch blocking events that start before our query range but overlap with it
|
|
344
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1000;
|
|
343
345
|
const queryStart = admin.firestore.Timestamp.fromMillis(
|
|
344
346
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
345
347
|
);
|
|
346
348
|
|
|
349
|
+
// Query for events that:
|
|
350
|
+
// 1. Start before or during our query range (eventTime.start < end)
|
|
351
|
+
// 2. We'll post-filter to ensure they overlap (eventTime.end > start)
|
|
347
352
|
const eventsRef = this.db
|
|
348
353
|
.collection(`clinics/${clinicId}/calendar`)
|
|
349
354
|
.where("eventTime.start", ">=", queryStart)
|
|
350
|
-
.where("eventTime.start", "
|
|
355
|
+
.where("eventTime.start", "<=", end)
|
|
351
356
|
.orderBy("eventTime.start");
|
|
352
357
|
|
|
353
358
|
const snapshot = await eventsRef.get();
|
|
354
359
|
|
|
360
|
+
// Post-filter to ensure events actually overlap with our query range
|
|
361
|
+
// An event overlaps if: eventTime.start < queryEnd AND eventTime.end > queryStart
|
|
355
362
|
const events = snapshot.docs
|
|
356
363
|
.map((doc) => ({
|
|
357
364
|
...doc.data(),
|
|
358
365
|
id: doc.id,
|
|
359
366
|
}))
|
|
360
367
|
.filter((event: any) => {
|
|
361
|
-
|
|
368
|
+
// Event overlaps if it ends after our start time
|
|
369
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
370
|
+
if (!overlaps) {
|
|
371
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping event", {
|
|
372
|
+
eventId: event.id,
|
|
373
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
374
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
375
|
+
queryStart: start.toDate().toISOString(),
|
|
376
|
+
queryEnd: end.toDate().toISOString(),
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return overlaps;
|
|
362
380
|
});
|
|
363
381
|
|
|
364
382
|
Logger.debug("[BookingAdmin] Retrieved clinic calendar events", {
|
|
@@ -403,26 +421,44 @@ export class BookingAdmin {
|
|
|
403
421
|
endTime: end.toDate().toISOString(),
|
|
404
422
|
});
|
|
405
423
|
|
|
406
|
-
|
|
424
|
+
// Increased to 30 days to handle long blocking events (e.g., holidays, extended time off)
|
|
425
|
+
// This ensures we catch blocking events that start before our query range but overlap with it
|
|
426
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1000;
|
|
407
427
|
const queryStart = admin.firestore.Timestamp.fromMillis(
|
|
408
428
|
start.toMillis() - MAX_EVENT_DURATION_MS
|
|
409
429
|
);
|
|
410
430
|
|
|
431
|
+
// Query for events that:
|
|
432
|
+
// 1. Start before or during our query range (eventTime.start <= end)
|
|
433
|
+
// 2. We'll post-filter to ensure they overlap (eventTime.end > start)
|
|
411
434
|
const eventsRef = this.db
|
|
412
435
|
.collection(`practitioners/${practitionerId}/calendar`)
|
|
413
436
|
.where("eventTime.start", ">=", queryStart)
|
|
414
|
-
.where("eventTime.start", "
|
|
437
|
+
.where("eventTime.start", "<=", end)
|
|
415
438
|
.orderBy("eventTime.start");
|
|
416
439
|
|
|
417
440
|
const snapshot = await eventsRef.get();
|
|
418
441
|
|
|
442
|
+
// Post-filter to ensure events actually overlap with our query range
|
|
443
|
+
// An event overlaps if: eventTime.start < queryEnd AND eventTime.end > queryStart
|
|
419
444
|
const events = snapshot.docs
|
|
420
445
|
.map((doc) => ({
|
|
421
446
|
...doc.data(),
|
|
422
447
|
id: doc.id,
|
|
423
448
|
}))
|
|
424
449
|
.filter((event: any) => {
|
|
425
|
-
|
|
450
|
+
// Event overlaps if it ends after our start time
|
|
451
|
+
const overlaps = event.eventTime.end.toMillis() > start.toMillis();
|
|
452
|
+
if (!overlaps) {
|
|
453
|
+
Logger.debug("[BookingAdmin] Filtered out non-overlapping practitioner event", {
|
|
454
|
+
eventId: event.id,
|
|
455
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
456
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
457
|
+
queryStart: start.toDate().toISOString(),
|
|
458
|
+
queryEnd: end.toDate().toISOString(),
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
return overlaps;
|
|
426
462
|
});
|
|
427
463
|
|
|
428
464
|
Logger.debug("[BookingAdmin] Retrieved practitioner calendar events", {
|
|
@@ -622,7 +622,15 @@ export async function searchCalendarEventsUtil(
|
|
|
622
622
|
}
|
|
623
623
|
if (filters.dateRange) {
|
|
624
624
|
// Firestore requires range filters on the same field
|
|
625
|
-
|
|
625
|
+
// We query for events that start within or before the date range
|
|
626
|
+
// Then post-filter to ensure they overlap (eventTime.end > dateRange.start)
|
|
627
|
+
// To catch events that start before but overlap, we extend the query start backwards
|
|
628
|
+
const MAX_EVENT_DURATION_MS = 30 * 24 * 60 * 60 * 1000; // 30 days for long blocking events
|
|
629
|
+
const extendedStart = Timestamp.fromMillis(
|
|
630
|
+
filters.dateRange.start.toMillis() - MAX_EVENT_DURATION_MS
|
|
631
|
+
);
|
|
632
|
+
|
|
633
|
+
constraints.push(where("eventTime.start", ">=", extendedStart));
|
|
626
634
|
constraints.push(where("eventTime.start", "<=", filters.dateRange.end));
|
|
627
635
|
// Note: You might need to order by eventTime.start for range filters to work efficiently
|
|
628
636
|
// constraints.push(orderBy("eventTime.start"));
|
|
@@ -633,10 +641,32 @@ export async function searchCalendarEventsUtil(
|
|
|
633
641
|
const finalQuery = query(collectionRef, ...constraints);
|
|
634
642
|
const querySnapshot = await getDocs(finalQuery);
|
|
635
643
|
|
|
636
|
-
|
|
644
|
+
let events = querySnapshot.docs.map(
|
|
637
645
|
(doc) => ({ id: doc.id, ...doc.data() } as CalendarEvent)
|
|
638
646
|
);
|
|
639
647
|
|
|
648
|
+
// Post-filter to ensure events actually overlap with the date range (if provided)
|
|
649
|
+
// An event overlaps if: eventTime.start < dateRange.end AND eventTime.end > dateRange.start
|
|
650
|
+
if (filters.dateRange) {
|
|
651
|
+
events = events.filter((event) => {
|
|
652
|
+
const overlaps =
|
|
653
|
+
event.eventTime.end.toMillis() > filters.dateRange!.start.toMillis();
|
|
654
|
+
if (!overlaps) {
|
|
655
|
+
console.debug(
|
|
656
|
+
`[searchCalendarEventsUtil] Filtered out non-overlapping event:`,
|
|
657
|
+
{
|
|
658
|
+
eventId: event.id,
|
|
659
|
+
eventStart: event.eventTime.start.toDate().toISOString(),
|
|
660
|
+
eventEnd: event.eventTime.end.toDate().toISOString(),
|
|
661
|
+
queryStart: filters.dateRange!.start.toDate().toISOString(),
|
|
662
|
+
queryEnd: filters.dateRange!.end.toDate().toISOString(),
|
|
663
|
+
}
|
|
664
|
+
);
|
|
665
|
+
}
|
|
666
|
+
return overlaps;
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
|
|
640
670
|
return events;
|
|
641
671
|
} catch (error) {
|
|
642
672
|
console.error("Error searching calendar events:", error);
|