@soulbatical/tetra-core 0.2.12 → 0.2.14

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.
@@ -92,12 +92,42 @@ export declare class GoogleCalendarService {
92
92
  disconnect(userId: string): Promise<void>;
93
93
  /**
94
94
  * Fetch events from Google Calendar for a date range (for bidirectional sync).
95
- * Returns busy time blocks.
95
+ * Returns busy time blocks from the user's selected (single) calendar.
96
96
  */
97
97
  getBusySlots(userId: string, dateStart: string, dateEnd: string): Promise<Array<{
98
98
  start_time: string;
99
99
  end_time: string;
100
100
  }>>;
101
+ /**
102
+ * Get selected calendars from planner_selected_calendars table.
103
+ * Falls back to the single calendar_id from planner_calendar_tokens if no selections exist.
104
+ */
105
+ getSelectedCalendars(userId: string): Promise<Array<{
106
+ id: string;
107
+ externalCalendarId: string;
108
+ calendarName: string;
109
+ calendarColor: string;
110
+ isPrimary: boolean;
111
+ isSelected: boolean;
112
+ }>>;
113
+ /**
114
+ * Update which calendars are selected for conflict checking.
115
+ * Upserts rows in planner_selected_calendars.
116
+ */
117
+ updateSelectedCalendars(userId: string, organizationId: string, calendars: Array<{
118
+ externalCalendarId: string;
119
+ isSelected: boolean;
120
+ }>): Promise<boolean>;
121
+ /**
122
+ * Fetch busy slots from ALL selected calendars for a date range.
123
+ * Returns combined busy blocks with calendar metadata.
124
+ */
125
+ getBusySlotsMulti(userId: string, dateStart: string, dateEnd: string): Promise<Array<{
126
+ start: string;
127
+ end: string;
128
+ summary: string | null;
129
+ calendarName: string;
130
+ }>>;
101
131
  }
102
132
  export {};
103
133
  //# sourceMappingURL=GoogleCalendarService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleCalendarService.d.ts","sourceRoot":"","sources":["../../../src/shared/planner/GoogleCalendarService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAWxD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,YAAY,CAAa;gBAErB,MAAM,EAAE,qBAAqB;YAM3B,SAAS;YAcT,WAAW;IAOzB,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,QAAQ,GAEnB;YAEa,kBAAkB;IAMhC;;;OAGG;YACW,sBAAsB;IA4DpC;;OAEG;YACW,aAAa;IAY3B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYjE;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCzF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BrF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B7F;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACjD,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,GAAG,IAAI,CAAC;IAyBV;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB1E;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBnD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C;;;OAGG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CA8B5D"}
1
+ {"version":3,"file":"GoogleCalendarService.d.ts","sourceRoot":"","sources":["../../../src/shared/planner/GoogleCalendarService.ts"],"names":[],"mappings":"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"}
@@ -331,7 +331,7 @@ export class GoogleCalendarService {
331
331
  }
332
332
  /**
333
333
  * Fetch events from Google Calendar for a date range (for bidirectional sync).
334
- * Returns busy time blocks.
334
+ * Returns busy time blocks from the user's selected (single) calendar.
335
335
  */
336
336
  async getBusySlots(userId, dateStart, dateEnd) {
337
337
  try {
@@ -361,5 +361,146 @@ export class GoogleCalendarService {
361
361
  return [];
362
362
  }
363
363
  }
364
+ // ─── Multi-Calendar Support ────────────────────────────────
365
+ /**
366
+ * Get selected calendars from planner_selected_calendars table.
367
+ * Falls back to the single calendar_id from planner_calendar_tokens if no selections exist.
368
+ */
369
+ async getSelectedCalendars(userId) {
370
+ try {
371
+ const db = await this.getSystemDB();
372
+ const { data: selections } = await db
373
+ .from('planner_selected_calendars')
374
+ .select('id, external_calendar_id, calendar_name, calendar_color, is_primary, is_selected')
375
+ .eq('user_id', userId)
376
+ .order('is_primary', { ascending: false })
377
+ .order('calendar_name', { ascending: true });
378
+ if (selections && selections.length > 0) {
379
+ return selections.map((s) => ({
380
+ id: s.id,
381
+ externalCalendarId: s.external_calendar_id,
382
+ calendarName: s.calendar_name || 'Unnamed',
383
+ calendarColor: s.calendar_color || '#4285f4',
384
+ isPrimary: s.is_primary || false,
385
+ isSelected: s.is_selected || false,
386
+ }));
387
+ }
388
+ // Fallback: list from Google and return with primary selected
389
+ const calendars = await this.listCalendars(userId);
390
+ if (!calendars)
391
+ return [];
392
+ return calendars.map((c) => ({
393
+ id: '',
394
+ externalCalendarId: c.id,
395
+ calendarName: c.name,
396
+ calendarColor: c.color,
397
+ isPrimary: c.isPrimary,
398
+ isSelected: c.isPrimary, // Default: only primary selected
399
+ }));
400
+ }
401
+ catch (error) {
402
+ logger.error({ error, userId }, 'Failed to get selected calendars');
403
+ return [];
404
+ }
405
+ }
406
+ /**
407
+ * Update which calendars are selected for conflict checking.
408
+ * Upserts rows in planner_selected_calendars.
409
+ */
410
+ async updateSelectedCalendars(userId, organizationId, calendars) {
411
+ try {
412
+ const db = await this.getSystemDB();
413
+ // Get all user's calendars from Google to enrich with names/colors
414
+ const googleCalendars = await this.listCalendars(userId);
415
+ const calMap = new Map((googleCalendars || []).map((c) => [c.id, c]));
416
+ for (const cal of calendars) {
417
+ const gcal = calMap.get(cal.externalCalendarId);
418
+ const { error } = await db
419
+ .from('planner_selected_calendars')
420
+ .upsert({
421
+ user_id: userId,
422
+ organization_id: organizationId,
423
+ provider: 'google',
424
+ external_calendar_id: cal.externalCalendarId,
425
+ calendar_name: gcal?.name || null,
426
+ calendar_color: gcal?.color || null,
427
+ is_primary: gcal?.isPrimary || false,
428
+ is_selected: cal.isSelected,
429
+ updated_at: new Date().toISOString(),
430
+ }, { onConflict: 'user_id,provider,external_calendar_id' });
431
+ if (error) {
432
+ logger.error({ error, userId, calendarId: cal.externalCalendarId }, 'Failed to upsert selected calendar');
433
+ return false;
434
+ }
435
+ }
436
+ logger.info({ userId, count: calendars.length }, 'Selected calendars updated');
437
+ return true;
438
+ }
439
+ catch (error) {
440
+ logger.error({ error, userId }, 'Failed to update selected calendars');
441
+ return false;
442
+ }
443
+ }
444
+ /**
445
+ * Fetch busy slots from ALL selected calendars for a date range.
446
+ * Returns combined busy blocks with calendar metadata.
447
+ */
448
+ async getBusySlotsMulti(userId, dateStart, dateEnd) {
449
+ try {
450
+ const oauth2Client = await this.getAuthenticatedClient(userId);
451
+ if (!oauth2Client)
452
+ return [];
453
+ const google = await this.getGoogle();
454
+ const calendar = google.calendar({ version: 'v3', auth: oauth2Client });
455
+ // Get selected calendars
456
+ const selectedCalendars = await this.getSelectedCalendars(userId);
457
+ const activeCalendars = selectedCalendars.filter((c) => c.isSelected);
458
+ if (activeCalendars.length === 0) {
459
+ // Fallback: use single selected calendar
460
+ const calendarId = await this.getCalendarId(userId);
461
+ activeCalendars.push({
462
+ id: '',
463
+ externalCalendarId: calendarId,
464
+ calendarName: 'Agenda',
465
+ calendarColor: '#4285f4',
466
+ isPrimary: true,
467
+ isSelected: true,
468
+ });
469
+ }
470
+ // Fetch events from all selected calendars in parallel
471
+ const results = await Promise.allSettled(activeCalendars.map(async (cal) => {
472
+ const response = await calendar.events.list({
473
+ calendarId: cal.externalCalendarId,
474
+ timeMin: `${dateStart}T00:00:00Z`,
475
+ timeMax: `${dateEnd}T23:59:59Z`,
476
+ singleEvents: true,
477
+ orderBy: 'startTime',
478
+ });
479
+ const events = response.data.items || [];
480
+ return events
481
+ .filter((e) => e.start?.dateTime && e.end?.dateTime && e.status !== 'cancelled')
482
+ .map((e) => ({
483
+ start: e.start.dateTime,
484
+ end: e.end.dateTime,
485
+ summary: e.summary || null,
486
+ calendarName: cal.calendarName,
487
+ }));
488
+ }));
489
+ // Flatten results, skip failed calendars
490
+ const allSlots = [];
491
+ for (const result of results) {
492
+ if (result.status === 'fulfilled') {
493
+ allSlots.push(...result.value);
494
+ }
495
+ }
496
+ // Sort by start time
497
+ allSlots.sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime());
498
+ return allSlots;
499
+ }
500
+ catch (error) {
501
+ logger.error({ error, userId }, 'Failed to fetch multi-calendar busy slots');
502
+ return [];
503
+ }
504
+ }
364
505
  }
365
506
  //# sourceMappingURL=GoogleCalendarService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleCalendarService.js","sourceRoot":"","sources":["../../../src/shared/planner/GoogleCalendarService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GoogleCalendarService.js","sourceRoot":"","sources":["../../../src/shared/planner/GoogleCalendarService.ts"],"names":[],"mappings":"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"}
@@ -94,6 +94,10 @@ export declare class PlannerService {
94
94
  maxDaysAhead: any;
95
95
  minLeadTimeHours: any;
96
96
  timeIncrementMinutes: any;
97
+ bufferBeforeMinutes: any;
98
+ bufferAfterMinutes: any;
99
+ maxSessionsPerDay: any;
100
+ maxSessionsPerWeek: any;
97
101
  }>;
98
102
  /**
99
103
  * Upsert scheduler settings for an owner.
@@ -106,6 +110,10 @@ export declare class PlannerService {
106
110
  maxDaysAhead: number;
107
111
  minLeadTimeHours: number;
108
112
  timeIncrementMinutes: number;
113
+ bufferBeforeMinutes: number;
114
+ bufferAfterMinutes: number;
115
+ maxSessionsPerDay: number | null;
116
+ maxSessionsPerWeek: number | null;
109
117
  }>): Promise<any>;
110
118
  /**
111
119
  * Compute available booking slots for a specific date.
@@ -174,5 +182,50 @@ export declare class PlannerService {
174
182
  * Book a slot via public booking (no auth).
175
183
  */
176
184
  publicBook(db: SupabaseClient, ownerId: string, input: PublicBookingInput): Promise<AppointmentRecord>;
185
+ /**
186
+ * Get truly available time slots for an owner over a date range.
187
+ *
188
+ * Formula:
189
+ * Available = Schedule Windows
190
+ * − Google Calendar busy (all selected calendars)
191
+ * − Internal appointments (+ buffer times)
192
+ * − Min lead time window (now → now + minLeadTimeHours)
193
+ * − Reserved slots (temporary booking locks)
194
+ * − Vacation/OOO days
195
+ *
196
+ * Returns continuous free intervals (not split into discrete slots).
197
+ */
198
+ getComputedAvailability(db: SupabaseClient, ownerId: string, dateFrom: string, dateTo: string, options?: {
199
+ /** External busy slots (from Google Calendar). If not provided, uses config.getExternalBusySlots */
200
+ externalBusy?: Array<{
201
+ start_time: string;
202
+ end_time: string;
203
+ }>;
204
+ /** Override buffer before in minutes */
205
+ bufferBeforeMinutes?: number;
206
+ /** Override buffer after in minutes */
207
+ bufferAfterMinutes?: number;
208
+ /** If true, split into discrete bookable slots using session duration */
209
+ splitIntoBookableSlots?: boolean;
210
+ }): Promise<Array<{
211
+ start: string;
212
+ end: string;
213
+ }>>;
214
+ /**
215
+ * Get appointments for an owner across a date range.
216
+ */
217
+ private getExistingAppointmentsRange;
218
+ /**
219
+ * Get vacations in a date range.
220
+ */
221
+ private getVacationsInRange;
222
+ /**
223
+ * Get reserved slots (temporary booking locks) in a date range.
224
+ */
225
+ private getReservedSlotsInRange;
226
+ /**
227
+ * Apply daily session limit by removing availability for days that are full.
228
+ */
229
+ private applyDailyLimit;
177
230
  }
178
231
  //# sourceMappingURL=PlannerService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlannerService.d.ts","sourceRoot":"","sources":["../../../src/shared/planner/PlannerService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAOpB,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,iBAAiB,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,EACzF,oBAAoB,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,IAAI,EAAE,MAAM,EACZ,mBAAmB,GAAE,MAAW,GAC/B,QAAQ,EAAE,CAkCZ;AAmCD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC,IAAI,UAAU,IAAI,MAAM,EAAE,CAGzB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,mBAAmB,IAAI,MAAM,EAAE,CAElC;IAID;;OAEG;IACG,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;IA0BzD;;OAEG;IACG,eAAe,CACnB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,qBAAqB,EAAE;IAuDhC;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBvF;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;IAwBtD;;OAEG;IACG,cAAc,CAClB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM;IA2BtB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM;IAgB3D;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;IAqCrD;;OAEG;IACG,cAAc,CAClB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IAiCJ;;;OAGG;IACG,iBAAiB,CACrB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC;IAgF3B;;OAEG;YACW,uBAAuB;IA6DrC;;OAEG;IACG,mBAAmB,CACvB,EAAE,EAAE,cAAc,EAClB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC;IA4D5B;;OAEG;IACG,oBAAoB,CACxB,EAAE,EAAE,cAAc,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAChE,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgC/B;;OAEG;IACG,gBAAgB,CACpB,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgD/B;;OAEG;IACG,iBAAiB,CACrB,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,GACA,OAAO,CAAC,iBAAiB,CAAC;IA4D7B;;OAEG;IACG,iBAAiB,CACrB,EAAE,EAAE,cAAc,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,GACD,OAAO,CAAC,iBAAiB,CAAC;IAiD7B;;OAEG;IACG,iBAAiB,CACrB,EAAE,EAAE,cAAc,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC;IA6B7B;;OAEG;IACG,mBAAmB,CACvB,EAAE,EAAE,cAAc,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC;IA+B7B;;OAEG;IACG,sBAAsB,CAC1B,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAuCtC;;OAEG;IACG,UAAU,CACd,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC;CAsJ9B"}
1
+ {"version":3,"file":"PlannerService.d.ts","sourceRoot":"","sources":["../../../src/shared/planner/PlannerService.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@
16
16
  * const slots = await planner.getAvailableSlots(db, ownerId, '2026-03-20');
17
17
  * ```
18
18
  */
19
+ import { buildScheduleIntervals, buildAppointmentIntervals, buildVacationIntervals, subtractIntervals, unionIntervals, intervalsToSlots, splitIntoSlots, } from './intervals.js';
19
20
  import { createLogger } from '../../utils/logger.js';
20
21
  const logger = createLogger('planner:service');
21
22
  // ─── Time Helpers ───────────────────────────────────────────
@@ -293,6 +294,10 @@ export class PlannerService {
293
294
  maxDaysAhead: defaults.maxDaysAhead ?? 14,
294
295
  minLeadTimeHours: defaults.minLeadTimeHours ?? 24,
295
296
  timeIncrementMinutes: defaults.timeIncrementMinutes ?? 15,
297
+ bufferBeforeMinutes: 0,
298
+ bufferAfterMinutes: 15,
299
+ maxSessionsPerDay: null,
300
+ maxSessionsPerWeek: null,
296
301
  };
297
302
  }
298
303
  return {
@@ -303,6 +308,10 @@ export class PlannerService {
303
308
  maxDaysAhead: data.max_days_ahead ?? defaults.maxDaysAhead ?? 14,
304
309
  minLeadTimeHours: data.min_lead_time_hours ?? defaults.minLeadTimeHours ?? 24,
305
310
  timeIncrementMinutes: data.time_increment_minutes ?? defaults.timeIncrementMinutes ?? 15,
311
+ bufferBeforeMinutes: data.buffer_before_minutes ?? 0,
312
+ bufferAfterMinutes: data.buffer_after_minutes ?? 15,
313
+ maxSessionsPerDay: data.max_sessions_per_day ?? null,
314
+ maxSessionsPerWeek: data.max_sessions_per_week ?? null,
306
315
  };
307
316
  }
308
317
  /**
@@ -328,6 +337,14 @@ export class PlannerService {
328
337
  row.min_lead_time_hours = settings.minLeadTimeHours;
329
338
  if (settings.timeIncrementMinutes !== undefined)
330
339
  row.time_increment_minutes = settings.timeIncrementMinutes;
340
+ if (settings.bufferBeforeMinutes !== undefined)
341
+ row.buffer_before_minutes = settings.bufferBeforeMinutes;
342
+ if (settings.bufferAfterMinutes !== undefined)
343
+ row.buffer_after_minutes = settings.bufferAfterMinutes;
344
+ if (settings.maxSessionsPerDay !== undefined)
345
+ row.max_sessions_per_day = settings.maxSessionsPerDay;
346
+ if (settings.maxSessionsPerWeek !== undefined)
347
+ row.max_sessions_per_week = settings.maxSessionsPerWeek;
331
348
  const { data, error } = await db
332
349
  .from('planner_scheduler_settings')
333
350
  .upsert(row, { onConflict: 'owner_id' })
@@ -915,5 +932,198 @@ export class PlannerService {
915
932
  }
916
933
  return record;
917
934
  }
935
+ // ─── Computed Availability (Subtract-Based Engine) ─────────
936
+ /**
937
+ * Get truly available time slots for an owner over a date range.
938
+ *
939
+ * Formula:
940
+ * Available = Schedule Windows
941
+ * − Google Calendar busy (all selected calendars)
942
+ * − Internal appointments (+ buffer times)
943
+ * − Min lead time window (now → now + minLeadTimeHours)
944
+ * − Reserved slots (temporary booking locks)
945
+ * − Vacation/OOO days
946
+ *
947
+ * Returns continuous free intervals (not split into discrete slots).
948
+ */
949
+ async getComputedAvailability(db, ownerId, dateFrom, dateTo, options) {
950
+ // 1. Get settings (including buffer times)
951
+ const settings = await this.getSettings(db, ownerId);
952
+ const bufferBeforeMs = ((options?.bufferBeforeMinutes ?? settings.bufferBeforeMinutes ?? 0) * 60 * 1000);
953
+ const bufferAfterMs = ((options?.bufferAfterMinutes ?? settings.bufferAfterMinutes ?? 15) * 60 * 1000);
954
+ // 2. Get recurring schedule rules
955
+ const { data: availSlots } = await db
956
+ .from('planner_availability_slots')
957
+ .select('day_of_week, start_time, end_time, is_available')
958
+ .eq('owner_id', ownerId)
959
+ .eq('is_available', true)
960
+ .order('day_of_week', { ascending: true })
961
+ .order('start_time', { ascending: true });
962
+ if (!availSlots || availSlots.length === 0) {
963
+ return [];
964
+ }
965
+ const scheduleIntervals = buildScheduleIntervals(availSlots.map((s) => ({
966
+ dayOfWeek: s.day_of_week,
967
+ startTime: s.start_time,
968
+ endTime: s.end_time,
969
+ isAvailable: s.is_available,
970
+ })), dateFrom, dateTo);
971
+ if (scheduleIntervals.length === 0)
972
+ return [];
973
+ // 3. Gather all busy intervals in parallel
974
+ const [internalAppts, vacations, reservedSlots] = await Promise.all([
975
+ // Internal appointments
976
+ this.getExistingAppointmentsRange(db, ownerId, dateFrom, dateTo),
977
+ // Vacations
978
+ this.getVacationsInRange(db, ownerId, dateFrom, dateTo),
979
+ // Reserved slots
980
+ this.getReservedSlotsInRange(db, ownerId, dateFrom, dateTo),
981
+ ]);
982
+ // External busy (Google Calendar)
983
+ let externalBusy = options?.externalBusy || [];
984
+ if (externalBusy.length === 0 && this.config.getExternalBusySlots) {
985
+ try {
986
+ // Fetch for each day in range
987
+ const current = new Date(dateFrom + 'T00:00:00Z');
988
+ const end = new Date(dateTo + 'T00:00:00Z');
989
+ while (current <= end) {
990
+ const d = current.toISOString().substring(0, 10);
991
+ const dayBusy = await this.config.getExternalBusySlots(ownerId, d);
992
+ externalBusy.push(...dayBusy);
993
+ current.setUTCDate(current.getUTCDate() + 1);
994
+ }
995
+ }
996
+ catch (err) {
997
+ logger.warn({ error: err, ownerId }, 'Failed to fetch external busy slots for computed availability');
998
+ }
999
+ }
1000
+ // 4. Build all busy intervals
1001
+ const allBusy = [
1002
+ ...buildAppointmentIntervals(internalAppts, bufferBeforeMs, bufferAfterMs),
1003
+ ...buildVacationIntervals(vacations, dateFrom, dateTo),
1004
+ ...reservedSlots.map((r) => ({
1005
+ start: new Date(r.slot_start).getTime(),
1006
+ end: new Date(r.slot_end).getTime(),
1007
+ })),
1008
+ ...externalBusy.map((e) => ({
1009
+ start: new Date(e.start_time).getTime(),
1010
+ end: new Date(e.end_time).getTime(),
1011
+ })),
1012
+ ];
1013
+ // Add min lead time window (now → now + minLeadTimeHours)
1014
+ const now = Date.now();
1015
+ const minLeadTimeMs = settings.minLeadTimeHours * 60 * 60 * 1000;
1016
+ if (minLeadTimeMs > 0) {
1017
+ allBusy.push({ start: 0, end: now + minLeadTimeMs });
1018
+ }
1019
+ // 5. Subtract busy from schedule
1020
+ const mergedBusy = unionIntervals(allBusy);
1021
+ let freeIntervals = subtractIntervals(scheduleIntervals, mergedBusy);
1022
+ // 6. Apply max sessions per day limit
1023
+ const maxPerDay = settings.maxSessionsPerDay;
1024
+ if (maxPerDay != null) {
1025
+ freeIntervals = await this.applyDailyLimit(freeIntervals, internalAppts, maxPerDay);
1026
+ }
1027
+ // 7. Optionally split into discrete bookable slots
1028
+ if (options?.splitIntoBookableSlots) {
1029
+ const slotMs = settings.sessionDurationMinutes * 60 * 1000;
1030
+ const incrementMs = (settings.timeIncrementMinutes || 15) * 60 * 1000;
1031
+ const discreteSlots = splitIntoSlots(freeIntervals, slotMs, incrementMs);
1032
+ return intervalsToSlots(discreteSlots);
1033
+ }
1034
+ return intervalsToSlots(freeIntervals);
1035
+ }
1036
+ /**
1037
+ * Get appointments for an owner across a date range.
1038
+ */
1039
+ async getExistingAppointmentsRange(db, ownerId, dateFrom, dateTo) {
1040
+ const rangeStart = `${dateFrom}T00:00:00Z`;
1041
+ const rangeEnd = `${dateTo}T23:59:59Z`;
1042
+ const appointments = [];
1043
+ const { data: organizerAppts } = await db
1044
+ .from('planner_appointments')
1045
+ .select('start_time, end_time')
1046
+ .eq('organizer_id', ownerId)
1047
+ .eq('status', 'scheduled')
1048
+ .gte('start_time', rangeStart)
1049
+ .lte('start_time', rangeEnd);
1050
+ if (organizerAppts)
1051
+ appointments.push(...organizerAppts);
1052
+ if (this.config.parentResource) {
1053
+ const { table, foreignKey } = this.config.parentResource;
1054
+ const { data: ownerParents } = await db
1055
+ .from(table)
1056
+ .select('id')
1057
+ .or(`${foreignKey}.eq.${ownerId}`);
1058
+ const parentIds = (ownerParents || []).map((p) => p.id);
1059
+ if (parentIds.length > 0) {
1060
+ const { data: parentAppts } = await db
1061
+ .from('planner_appointments')
1062
+ .select('start_time, end_time')
1063
+ .in('parent_id', parentIds)
1064
+ .eq('status', 'scheduled')
1065
+ .gte('start_time', rangeStart)
1066
+ .lte('start_time', rangeEnd);
1067
+ if (parentAppts) {
1068
+ const existing = new Set(appointments.map((a) => `${a.start_time}|${a.end_time}`));
1069
+ for (const a of parentAppts) {
1070
+ const key = `${a.start_time}|${a.end_time}`;
1071
+ if (!existing.has(key)) {
1072
+ appointments.push(a);
1073
+ existing.add(key);
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ }
1079
+ return appointments;
1080
+ }
1081
+ /**
1082
+ * Get vacations in a date range.
1083
+ */
1084
+ async getVacationsInRange(db, ownerId, dateFrom, dateTo) {
1085
+ const { data } = await db
1086
+ .from('planner_vacations')
1087
+ .select('start_date, end_date')
1088
+ .eq('owner_id', ownerId)
1089
+ .lte('start_date', dateTo)
1090
+ .gte('end_date', dateFrom);
1091
+ return data || [];
1092
+ }
1093
+ /**
1094
+ * Get reserved slots (temporary booking locks) in a date range.
1095
+ */
1096
+ async getReservedSlotsInRange(db, ownerId, dateFrom, dateTo) {
1097
+ try {
1098
+ const { data } = await db
1099
+ .from('planner_reserved_slots')
1100
+ .select('slot_start, slot_end')
1101
+ .eq('coach_id', ownerId)
1102
+ .gte('slot_start', `${dateFrom}T00:00:00Z`)
1103
+ .lte('slot_start', `${dateTo}T23:59:59Z`)
1104
+ .gt('release_at', new Date().toISOString());
1105
+ return data || [];
1106
+ }
1107
+ catch {
1108
+ // Table may not exist yet (Phase 3)
1109
+ return [];
1110
+ }
1111
+ }
1112
+ /**
1113
+ * Apply daily session limit by removing availability for days that are full.
1114
+ */
1115
+ async applyDailyLimit(freeIntervals, existingAppts, maxPerDay) {
1116
+ // Count appointments per day
1117
+ const countByDay = new Map();
1118
+ for (const a of existingAppts) {
1119
+ const day = a.start_time.substring(0, 10);
1120
+ countByDay.set(day, (countByDay.get(day) || 0) + 1);
1121
+ }
1122
+ // Filter out intervals on days that are already at limit
1123
+ return freeIntervals.filter((interval) => {
1124
+ const day = new Date(interval.start).toISOString().substring(0, 10);
1125
+ return (countByDay.get(day) || 0) < maxPerDay;
1126
+ });
1127
+ }
918
1128
  }
919
1129
  //# sourceMappingURL=PlannerService.js.map