@fayz-ai/plugin-agenda 0.2.0 → 0.2.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/supabase.ts","../src/data/mock.ts"],"names":["now","addMinutes"],"mappings":"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","file":"chunk-U6VTLOHN.js","sourcesContent":["import type { AgendaDataProvider } from './types'\nimport type {\n CalendarBooking, Professional, Schedule, TimeSlot,\n CreateBookingInput, UpdateBookingInput, SaveScheduleInput,\n BookingQuery, ConflictCheckParams, AvailableSlotsParams, BookingStatus,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getAgendaTenantId } from '../lib/tenant'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getTenantId(): string | undefined {\n // Plugin-local override wins; else fall back to the app's active tenant so\n // writes stamp the right tenant_id and pass orders/bookings RLS.\n return getAgendaTenantId() ?? getActiveTenantId()\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\nfunction getClients() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n return { core: supabase.schema('saas_core'), pub: supabase }\n}\n\nfunction mapBooking(row: Record<string, unknown>): CalendarBooking {\n return snakeToCamel(row) as unknown as CalendarBooking\n}\n\nfunction mapSchedule(row: Record<string, unknown>): Schedule {\n return snakeToCamel(row) as unknown as Schedule\n}\n\nfunction addMinutes(iso: string, minutes: number): string {\n const d = new Date(iso)\n d.setMinutes(d.getMinutes() + minutes)\n return d.toISOString()\n}\n\nfunction unique(values: Array<string | null | undefined>): string[] {\n return Array.from(new Set(values.filter((value): value is string => !!value)))\n}\n\nfunction indexById(rows: any[] | null | undefined): Map<string, any> {\n return new Map((rows ?? []).filter((row) => row?.id).map((row) => [row.id, row]))\n}\n\nfunction groupBy<T>(rows: T[], getKey: (row: T) => string | null | undefined): Map<string, T[]> {\n const grouped = new Map<string, T[]>()\n for (const row of rows) {\n const key = getKey(row)\n if (!key) continue\n grouped.set(key, [...(grouped.get(key) ?? []), row])\n }\n return grouped\n}\n\nfunction getDurationMinutes(startsAt: string, endsAt: string | null | undefined): number | null {\n if (!endsAt) return null\n return Math.round((new Date(endsAt).getTime() - new Date(startsAt).getTime()) / 60000)\n}\n\nfunction mergeBookings(viewBookings: CalendarBooking[], canonicalBookings: CalendarBooking[]): CalendarBooking[] {\n const canonicalIds = new Set(canonicalBookings.map((booking) => booking.id))\n const canonicalOrderIds = new Set(canonicalBookings.map((booking) => booking.orderId).filter(Boolean))\n const merged = [\n ...canonicalBookings,\n ...viewBookings.filter((booking) => {\n if (canonicalIds.has(booking.id)) return false\n if (booking.orderId && canonicalOrderIds.has(booking.orderId)) return false\n if (canonicalOrderIds.has(booking.id)) return false\n return true\n }),\n ]\n\n return merged.sort((a, b) => new Date(a.startsAt).getTime() - new Date(b.startsAt).getTime())\n}\n\nasync function hydrateCanonicalBookings(core: any, bookings: any[]): Promise<CalendarBooking[]> {\n const personIds = unique(bookings.flatMap((booking) => [booking.party_id, booking.assignee_id]))\n const locationIds = unique(bookings.map((booking) => booking.location_id))\n const orderIds = unique(bookings.map((booking) => booking.order_id))\n const bookingIds = unique(bookings.map((booking) => booking.id))\n\n const [\n { data: persons, error: personsError },\n { data: locations, error: locationsError },\n { data: orders, error: ordersError },\n { data: items, error: itemsError },\n ] = await Promise.all([\n personIds.length\n ? core.from('persons').select('id, name, phone, email, avatar_url').in('id', personIds)\n : Promise.resolve({ data: [], error: null }),\n locationIds.length\n ? core.from('locations').select('id, name').in('id', locationIds)\n : Promise.resolve({ data: [], error: null }),\n orderIds.length\n ? core.from('orders').select('id, total, status').in('id', orderIds)\n : Promise.resolve({ data: [], error: null }),\n orderIds.length\n ? core.from('order_items').select('id, order_id, service_id, name, duration_minutes, unit_price, assignee_id, sort_order').in('order_id', orderIds)\n : Promise.resolve({ data: [], error: null }),\n ])\n\n if (personsError) throw personsError\n if (locationsError) throw locationsError\n if (ordersError) throw ordersError\n if (itemsError) throw itemsError\n\n const personsById = indexById(persons)\n const locationsById = indexById(locations)\n const ordersById = indexById(orders)\n // S4: line items come from order_items (single source), keyed by order_id.\n const itemsByOrderId = groupBy(items ?? [], (item: any) => item.order_id)\n\n return bookings.map((booking) => {\n const client = booking.party_id ? personsById.get(booking.party_id) : null\n const professional = booking.assignee_id ? personsById.get(booking.assignee_id) : null\n const location = booking.location_id ? locationsById.get(booking.location_id) : null\n const order = booking.order_id ? ordersById.get(booking.order_id) : null\n const bookingItems = ((booking.order_id ? itemsByOrderId.get(booking.order_id) : null) ?? [])\n .sort((a: any, b: any) => (a.sort_order ?? 0) - (b.sort_order ?? 0))\n .map((item: any) => ({\n id: item.id,\n serviceId: item.service_id,\n name: item.name,\n durationMinutes: item.duration_minutes,\n price: item.unit_price,\n assigneeId: item.assignee_id,\n }))\n const itemDuration = bookingItems.reduce((sum: number, item: any) => sum + (item.durationMinutes ?? 0), 0)\n\n return {\n id: booking.id,\n tenantId: booking.tenant_id,\n kind: booking.kind,\n startsAt: booking.starts_at,\n endsAt: booking.ends_at,\n status: booking.status,\n notes: booking.notes,\n orderId: booking.order_id,\n locationId: booking.location_id,\n metadata: booking.metadata ?? {},\n clientId: booking.party_id,\n // Simple events (no party) fall back to the title stored in metadata.\n clientName: client?.name ?? (booking.metadata?.title as string | undefined) ?? null,\n clientPhone: client?.phone ?? null,\n clientEmail: client?.email ?? null,\n clientAvatarUrl: client?.avatar_url ?? null,\n professionalId: booking.assignee_id,\n professionalName: professional?.name ?? null,\n professionalAvatarUrl: professional?.avatar_url ?? null,\n locationName: location?.name ?? null,\n orderTotal: order?.total ?? null,\n orderStatus: order?.status ?? null,\n services: bookingItems.length ? bookingItems : null,\n totalDurationMinutes: itemDuration || getDurationMinutes(booking.starts_at, booking.ends_at),\n createdAt: booking.created_at,\n updatedAt: booking.updated_at,\n } satisfies CalendarBooking\n })\n}\n\nasync function getCanonicalBookings(core: any, query: BookingQuery): Promise<CalendarBooking[]> {\n let q = core.from('bookings')\n .select('id, tenant_id, kind, starts_at, ends_at, status, notes, order_id, location_id, metadata, party_id, assignee_id, created_at, updated_at')\n .gte('starts_at', query.dateRange.start)\n .lte('starts_at', query.dateRange.end)\n\n if (query.kind) q = q.eq('kind', query.kind)\n if (query.statuses?.length) q = q.in('status', query.statuses)\n if (query.professionalIds?.length) q = q.in('assignee_id', query.professionalIds)\n if (query.locationId) q = q.eq('location_id', query.locationId)\n\n const { data, error } = await q.order('starts_at', { ascending: true })\n if (error) throw error\n return hydrateCanonicalBookings(core, data ?? [])\n}\n\nasync function getCanonicalBookingById(core: any, id: string): Promise<CalendarBooking | null> {\n const columns = 'id, tenant_id, kind, starts_at, ends_at, status, notes, order_id, location_id, metadata, party_id, assignee_id, created_at, updated_at'\n let { data, error } = await core.from('bookings').select(columns).eq('id', id).maybeSingle()\n if (error) throw error\n\n if (!data) {\n const fallback = await core.from('bookings').select(columns).eq('order_id', id).maybeSingle()\n if (fallback.error) throw fallback.error\n data = fallback.data\n }\n\n if (!data) return null\n const [booking] = await hydrateCanonicalBookings(core, [data])\n return booking ?? null\n}\n\n// ---------------------------------------------------------------------------\n// Supabase Agenda Provider\n// ---------------------------------------------------------------------------\n\nexport function createSupabaseAgendaProvider(): AgendaDataProvider {\n return {\n // v_bookings is in public schema (PostgREST default)\n async getBookings(query: BookingQuery): Promise<CalendarBooking[]> {\n const { core, pub } = getClients()\n let q = pub.from('v_bookings').select('*')\n .gte('starts_at', query.dateRange.start)\n .lte('starts_at', query.dateRange.end)\n\n if (query.kind) q = q.eq('kind', query.kind)\n if (query.statuses?.length) q = q.in('status', query.statuses)\n if (query.professionalIds?.length) q = q.in('professional_id', query.professionalIds)\n if (query.locationId) q = q.eq('location_id', query.locationId)\n\n q = q.order('starts_at', { ascending: true })\n\n const { data, error } = await q\n if (error) throw error\n const viewBookings = (data ?? []).map(mapBooking)\n const canonicalBookings = await getCanonicalBookings(core, query)\n return mergeBookings(viewBookings, canonicalBookings)\n },\n\n async getBookingById(id: string): Promise<CalendarBooking | null> {\n const { core, pub } = getClients()\n const { data, error } = await pub.from('v_bookings').select('*').eq('id', id).maybeSingle()\n if (error) throw error\n if (data) return mapBooking(data as Record<string, unknown>)\n return getCanonicalBookingById(core, id)\n },\n\n async createBooking(input: CreateBookingInput): Promise<CalendarBooking> {\n const { core } = getClients()\n const tenantId = getTenantId()\n if (!tenantId) throw new Error('No active tenant')\n\n const hasServices = input.services.length > 0\n const totalDuration = input.services.reduce((sum, s) => sum + s.durationMinutes, 0)\n const totalPrice = input.services.reduce((sum, s) => sum + s.price, 0)\n const endsAt = addMinutes(input.startsAt, totalDuration || 30)\n const serviceNames = input.services.map((s: any) => s.name).join(', ')\n\n // Resolve client name for metadata (used by financial detail view)\n let contactName: string | undefined\n if (input.clientId) {\n const { data: person } = await core.from('persons').select('name').eq('id', input.clientId).single()\n contactName = person?.name as string | undefined\n }\n\n // Simple / Google-Calendar-style events have no client party — persist the\n // free-text title in metadata so the read model can surface it as the name.\n const eventTitle = input.title?.trim() || undefined\n\n const { data: order, error: orderErr } = await core.from('orders').insert({\n tenant_id: tenantId,\n kind: input.kind ?? 'appointment',\n status: 'scheduled',\n party_id: input.clientId || null,\n assignee_id: input.professionalId,\n location_id: input.locationId ?? null,\n subtotal: totalPrice,\n total: totalPrice,\n notes: input.notes ?? null,\n metadata: {\n source: 'agenda',\n ...(serviceNames ? { serviceNames, itemsSummary: serviceNames } : {}),\n ...(contactName ? { contactName } : {}),\n ...(eventTitle ? { title: eventTitle } : {}),\n },\n }).select('id').single()\n if (orderErr) throw orderErr\n\n const { data: booking, error: bookingErr } = await core.from('bookings').insert({\n tenant_id: tenantId,\n kind: input.kind ?? 'appointment',\n party_id: input.clientId || null,\n assignee_id: input.professionalId,\n location_id: input.locationId ?? null,\n order_id: order.id,\n starts_at: input.startsAt,\n ends_at: endsAt,\n status: 'scheduled',\n notes: input.notes ?? null,\n metadata: {\n source: 'agenda',\n ...(serviceNames ? { serviceNames, itemsSummary: serviceNames } : {}),\n ...(contactName ? { contactName } : {}),\n ...(eventTitle ? { title: eventTitle } : {}),\n },\n }).select('id').single()\n if (bookingErr) throw bookingErr\n\n if (hasServices) {\n // S4: line items live ONLY in order_items now (booking_items deprecated).\n const orderItems = input.services.map((s, i) => ({\n order_id: order.id,\n service_id: s.serviceId,\n name: s.name,\n quantity: 1,\n unit_price: s.price,\n total: s.price,\n sort_order: i,\n duration_minutes: s.durationMinutes,\n assignee_id: s.assigneeId ?? input.professionalId,\n }))\n const { error: oiErr } = await core.from('order_items').insert(orderItems)\n if (oiErr) throw oiErr\n }\n\n const createdBooking = await this.getBookingById(booking.id)\n if (!createdBooking) throw new Error('Created booking did not resolve from agenda read model')\n return createdBooking\n },\n\n async updateBooking(id: string, data: UpdateBookingInput): Promise<CalendarBooking> {\n const { core } = getClients()\n const { data: existing, error: existingErr } = await core.from('bookings')\n .select('id, order_id, starts_at, assignee_id, metadata')\n .eq('id', id)\n .single()\n if (existingErr) throw existingErr\n\n const updates: Record<string, unknown> = {}\n if (data.startsAt) updates.starts_at = data.startsAt\n if (data.endsAt) updates.ends_at = data.endsAt\n // Simple-event title lives in metadata (no client party) — merge, don't clobber.\n if (data.title !== undefined) {\n updates.metadata = { ...(existing?.metadata as Record<string, unknown> ?? {}), title: data.title }\n }\n if (data.status) {\n // Only update the agenda status — never touch the financial stage\n updates.status = data.status\n }\n if (data.notes !== undefined) updates.notes = data.notes\n if (data.professionalId) updates.assignee_id = data.professionalId\n if (data.clientId) updates.party_id = data.clientId\n if (data.locationId) updates.location_id = data.locationId\n\n // Recalculate totals when services are updated\n if (data.services) {\n const totalDuration = data.services.reduce((s, svc) => s + svc.durationMinutes, 0)\n const totalPrice = data.services.reduce((s, svc) => s + svc.price, 0)\n // Recalculate ends_at from startsAt + total duration\n const startsAt = data.startsAt ?? (existing?.starts_at as string | undefined)\n if (startsAt) {\n const ends = new Date(new Date(startsAt).getTime() + totalDuration * 60000)\n updates.ends_at = ends.toISOString()\n }\n }\n\n const effectiveAssigneeId = data.professionalId ?? (existing?.assignee_id as string | null | undefined) ?? null\n\n const { error } = await core.from('bookings').update(updates).eq('id', id)\n if (error) throw error\n\n // S4: services are updated only in order_items below (booking_items deprecated).\n const orderId = existing?.order_id as string | null | undefined\n if (orderId) {\n const orderUpdates: Record<string, unknown> = {}\n if (data.notes !== undefined) orderUpdates.notes = data.notes\n if (data.professionalId) orderUpdates.assignee_id = data.professionalId\n if (data.clientId) orderUpdates.party_id = data.clientId\n if (data.locationId) orderUpdates.location_id = data.locationId\n\n if (data.services) {\n const totalPrice = data.services.reduce((s, svc) => s + svc.price, 0)\n orderUpdates.subtotal = totalPrice\n orderUpdates.total = totalPrice\n }\n\n if (Object.keys(orderUpdates).length > 0) {\n const { error: orderErr } = await core.from('orders').update(orderUpdates).eq('id', orderId)\n if (orderErr) throw orderErr\n }\n\n if (data.services) {\n await core.from('order_items').delete().eq('order_id', orderId)\n if (data.services.length > 0) {\n const items = data.services.map((svc, idx) => ({\n order_id: orderId,\n service_id: svc.serviceId || null,\n name: svc.name,\n quantity: 1,\n unit_price: svc.price,\n total: svc.price,\n sort_order: idx,\n duration_minutes: svc.durationMinutes,\n assignee_id: svc.assigneeId ?? effectiveAssigneeId,\n }))\n const { error: itemErr } = await core.from('order_items').insert(items)\n if (itemErr) throw itemErr\n }\n }\n }\n\n return (await this.getBookingById(id))!\n },\n\n async deleteBooking(id: string): Promise<void> {\n const { core, pub } = getClients()\n const { data: booking, error: bookingErr } = await core.from('bookings')\n .select('order_id')\n .eq('id', id)\n .single()\n if (bookingErr) throw bookingErr\n\n const orderId = booking?.order_id as string | null | undefined\n const { count, error: movementErr } = orderId\n ? await pub.from('financial_movements').select('id', { count: 'exact', head: true }).eq('invoice_id', orderId)\n : { count: 0, error: null }\n if (movementErr) throw movementErr\n\n if (orderId && (count ?? 0) > 0) {\n // Cancel movements + order (don't delete financial records)\n await pub.from('financial_movements').update({ status: 'cancelled' }).eq('invoice_id', orderId)\n await core.from('orders').update({ status: 'cancelled' }).eq('id', orderId)\n const { error } = await core.from('bookings').update({ status: 'cancelled' }).eq('id', id)\n if (error) throw error\n } else {\n // Safe to delete — remove any movements first (FK constraint)\n if (orderId) {\n await pub.from('financial_movements').delete().eq('invoice_id', orderId)\n }\n const { error } = await core.from('bookings').delete().eq('id', id)\n if (error) throw error\n if (orderId) {\n const { error: orderErr } = await core.from('orders').delete().eq('id', orderId)\n if (orderErr) throw orderErr\n }\n }\n },\n\n async updateBookingStatus(id: string, status: string): Promise<CalendarBooking> {\n return this.updateBooking(id, { status: status as BookingStatus })\n },\n\n async checkConflict(params: ConflictCheckParams): Promise<boolean> {\n const { core } = getClients()\n let q = core.from('bookings').select('id', { count: 'exact', head: true })\n .eq('assignee_id', params.assigneeId)\n .eq('kind', 'appointment')\n .not('status', 'in', '(\"cancelled\",\"no_show\")')\n .not('starts_at', 'is', null)\n .lt('starts_at', params.endsAt)\n .gt('ends_at', params.startsAt)\n\n if (params.excludeBookingId) {\n q = q.neq('id', params.excludeBookingId)\n }\n\n const { count, error } = await q\n if (error) throw error\n return (count ?? 0) > 0\n },\n\n async getAvailableSlots(params: AvailableSlotsParams): Promise<TimeSlot[]> {\n const { pub } = getClients()\n const { data, error } = await pub.rpc('get_available_slots', {\n p_tenant_id: getTenantId(),\n p_assignee_id: params.assigneeId,\n p_date: params.date,\n p_duration_minutes: params.durationMinutes,\n p_slot_interval: params.slotInterval ?? 30,\n })\n if (error) throw error\n return (data ?? []).map((row: any) => ({ start: row.slot_start, end: row.slot_end }))\n },\n\n async getSchedules(professionalId?: string): Promise<Schedule[]> {\n const { core } = getClients()\n let q = core.from('schedules').select('*').eq('kind', 'working_hours')\n if (professionalId) q = q.eq('assignee_id', professionalId)\n q = q.order('day_of_week').order('starts_at')\n\n const { data, error } = await q\n if (error) throw error\n return (data ?? []).map(mapSchedule)\n },\n\n async saveSchedule(input: SaveScheduleInput): Promise<Schedule> {\n const { core } = getClients()\n const tenantId = getTenantId()\n if (!tenantId) throw new Error('No active tenant')\n\n const { data, error } = await core.from('schedules').insert({\n tenant_id: tenantId,\n kind: 'working_hours',\n assignee_id: input.assigneeId,\n location_id: input.locationId ?? null,\n day_of_week: input.dayOfWeek ?? null,\n specific_date: input.specificDate ?? null,\n starts_at: input.startsAt,\n ends_at: input.endsAt,\n is_active: input.isActive !== false,\n metadata: input.metadata ?? {},\n }).select('*').single()\n if (error) throw error\n return mapSchedule(data as Record<string, unknown>)\n },\n\n async deleteSchedule(id: string): Promise<void> {\n const { core } = getClients()\n const { error } = await core.from('schedules').delete().eq('id', id)\n if (error) throw error\n },\n\n async getProfessionals(): Promise<Professional[]> {\n const { core } = getClients()\n const { data, error } = await core.from('persons')\n .select('id, name, avatar_url, is_active')\n .eq('kind', 'staff')\n .eq('is_active', true)\n .order('name')\n if (error) throw error\n return (data ?? []).map((p: any) => ({\n id: p.id, name: p.name, avatarUrl: p.avatar_url,\n locationId: null, locationName: null, isActive: p.is_active,\n }))\n },\n\n async getLocations(): Promise<Array<{ id: string; name: string }>> {\n const { core } = getClients()\n const { data, error } = await core.from('locations')\n .select('id, name')\n .eq('is_active', true)\n .order('name')\n if (error) throw error\n return (data ?? []).map((l: any) => ({ id: l.id, name: l.name }))\n },\n\n async getConfirmationsPending(daysAhead = 2): Promise<CalendarBooking[]> {\n const { pub } = getClients()\n const now = new Date().toISOString()\n const cutoff = new Date()\n cutoff.setDate(cutoff.getDate() + daysAhead)\n\n const { data, error } = await pub.from('v_bookings').select('*')\n .eq('status', 'scheduled')\n .gte('starts_at', now)\n .lte('starts_at', cutoff.toISOString())\n .order('starts_at')\n if (error) throw error\n return (data ?? []).map(mapBooking)\n },\n\n async sendConfirmation(bookingId: string, channel: string): Promise<void> {\n const { core } = getClients()\n const { data: booking } = await core.from('bookings').select('metadata').eq('id', bookingId).single()\n const metadata = (booking?.metadata ?? {}) as Record<string, unknown>\n const confirmations = (metadata.confirmations as any[] ?? [])\n confirmations.push({ channel, sentAt: new Date().toISOString(), status: 'sent' })\n await core.from('bookings').update({ metadata: { ...metadata, confirmations } }).eq('id', bookingId)\n },\n\n async completeBooking(bookingId: string): Promise<{ booking: CalendarBooking; orderId: string }> {\n const { core } = getClients()\n const { data: existing, error: existingErr } = await core.from('bookings')\n .select('order_id')\n .eq('id', bookingId)\n .single()\n if (existingErr) throw existingErr\n\n const { error } = await core.from('bookings')\n .update({ status: 'completed' })\n .eq('id', bookingId)\n if (error) throw error\n\n const orderId = existing?.order_id as string | null | undefined\n const booking = await this.getBookingById(bookingId)\n if (!booking) throw new Error('Booking not found')\n return { booking, orderId: orderId ?? bookingId }\n },\n }\n}\n","import type { AgendaDataProvider } from './types'\nimport type {\n CalendarBooking, Professional, Schedule, TimeSlot,\n CreateBookingInput, UpdateBookingInput, SaveScheduleInput,\n BookingQuery, ConflictCheckParams, AvailableSlotsParams, BookingStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string { return `mock-${nextId++}` }\nfunction now(): string { return new Date().toISOString() }\n\nfunction addMinutes(date: string, minutes: number): string {\n const d = new Date(date)\n d.setMinutes(d.getMinutes() + minutes)\n return d.toISOString()\n}\n\nfunction timeOverlaps(aStart: string, aEnd: string, bStart: string, bEnd: string): boolean {\n return aStart < bEnd && aEnd > bStart\n}\n\n// ---------------------------------------------------------------------------\n// Sample data\n// ---------------------------------------------------------------------------\n\nconst SAMPLE_PROFESSIONALS: Professional[] = [\n { id: 'prof-1', name: 'Ana Silva', avatarUrl: null, locationId: 'loc-1', locationName: 'Main Branch', isActive: true },\n { id: 'prof-2', name: 'Carlos Santos', avatarUrl: null, locationId: 'loc-1', locationName: 'Main Branch', isActive: true },\n { id: 'prof-3', name: 'Maria Oliveira', avatarUrl: null, locationId: 'loc-1', locationName: 'Main Branch', isActive: true },\n]\n\nfunction createSampleBookings(): CalendarBooking[] {\n const today = new Date()\n const year = today.getFullYear()\n const month = today.getMonth()\n const day = today.getDate()\n\n function dt(hour: number, minute = 0): string {\n return new Date(year, month, day, hour, minute).toISOString()\n }\n\n return [\n {\n id: 'bk-1', tenantId: 'mock', kind: 'appointment',\n startsAt: dt(9, 0), endsAt: dt(10, 30), status: 'confirmed',\n notes: null, orderId: 'ord-1', locationId: 'loc-1', metadata: {},\n clientId: 'cl-1', clientName: 'Sarah Johnson', clientPhone: '(11) 99999-1111', clientEmail: 'sarah@email.com', clientAvatarUrl: null,\n professionalId: 'prof-1', professionalName: 'Ana Silva', professionalAvatarUrl: null,\n locationName: 'Main Branch', orderTotal: 250, orderStatus: 'draft',\n services: [{ id: 'bi-1', serviceId: 'svc-1', name: 'Balayage', durationMinutes: 90, price: 250, assigneeId: 'prof-1' }],\n totalDurationMinutes: 90, createdAt: now(), updatedAt: now(),\n },\n {\n id: 'bk-2', tenantId: 'mock', kind: 'appointment',\n startsAt: dt(10, 0), endsAt: dt(11, 0), status: 'scheduled',\n notes: null, orderId: 'ord-2', locationId: 'loc-1', metadata: {},\n clientId: 'cl-2', clientName: 'Emily Carter', clientPhone: '(11) 99999-2222', clientEmail: 'emily@email.com', clientAvatarUrl: null,\n professionalId: 'prof-2', professionalName: 'Carlos Santos', professionalAvatarUrl: null,\n locationName: 'Main Branch', orderTotal: 80, orderStatus: 'draft',\n services: [{ id: 'bi-2', serviceId: 'svc-2', name: 'Haircut', durationMinutes: 60, price: 80, assigneeId: 'prof-2' }],\n totalDurationMinutes: 60, createdAt: now(), updatedAt: now(),\n },\n {\n id: 'bk-3', tenantId: 'mock', kind: 'appointment',\n startsAt: dt(14, 0), endsAt: dt(15, 0), status: 'confirmed',\n notes: 'First visit', orderId: 'ord-3', locationId: 'loc-1', metadata: {},\n clientId: 'cl-3', clientName: 'Rachel Kim', clientPhone: '(11) 99999-3333', clientEmail: null, clientAvatarUrl: null,\n professionalId: 'prof-3', professionalName: 'Maria Oliveira', professionalAvatarUrl: null,\n locationName: 'Main Branch', orderTotal: 120, orderStatus: 'draft',\n services: [{ id: 'bi-3', serviceId: 'svc-3', name: 'Facial Treatment', durationMinutes: 60, price: 120, assigneeId: 'prof-3' }],\n totalDurationMinutes: 60, createdAt: now(), updatedAt: now(),\n },\n {\n id: 'bk-4', tenantId: 'mock', kind: 'appointment',\n startsAt: dt(11, 0), endsAt: dt(12, 0), status: 'scheduled',\n notes: null, orderId: 'ord-4', locationId: 'loc-1', metadata: {},\n clientId: 'cl-4', clientName: 'Jessica Lima', clientPhone: '(11) 99999-4444', clientEmail: null, clientAvatarUrl: null,\n professionalId: 'prof-1', professionalName: 'Ana Silva', professionalAvatarUrl: null,\n locationName: 'Main Branch', orderTotal: 60, orderStatus: 'draft',\n services: [{ id: 'bi-4', serviceId: 'svc-4', name: 'Manicure', durationMinutes: 60, price: 60, assigneeId: 'prof-1' }],\n totalDurationMinutes: 60, createdAt: now(), updatedAt: now(),\n },\n {\n id: 'bk-5', tenantId: 'mock', kind: 'appointment',\n startsAt: dt(15, 30), endsAt: dt(17, 0), status: 'confirmed',\n notes: null, orderId: 'ord-5', locationId: 'loc-1', metadata: {},\n clientId: 'cl-5', clientName: 'Amanda Wright', clientPhone: '(11) 99999-5555', clientEmail: 'amanda@email.com', clientAvatarUrl: null,\n professionalId: 'prof-2', professionalName: 'Carlos Santos', professionalAvatarUrl: null,\n locationName: 'Main Branch', orderTotal: 350, orderStatus: 'draft',\n services: [\n { id: 'bi-5', serviceId: 'svc-1', name: 'Highlights', durationMinutes: 60, price: 200, assigneeId: 'prof-2' },\n { id: 'bi-6', serviceId: 'svc-2', name: 'Haircut', durationMinutes: 30, price: 150, assigneeId: 'prof-2' },\n ],\n totalDurationMinutes: 90, createdAt: now(), updatedAt: now(),\n },\n ]\n}\n\nfunction createSampleSchedules(): Schedule[] {\n const schedules: Schedule[] = []\n for (const prof of SAMPLE_PROFESSIONALS) {\n // Mon-Fri 08:00-12:00, 13:00-18:00\n for (let day = 1; day <= 5; day++) {\n schedules.push({\n id: uid(), tenantId: 'mock', kind: 'working_hours',\n assigneeId: prof.id, locationId: prof.locationId,\n dayOfWeek: day, specificDate: null,\n startsAt: '08:00', endsAt: '12:00', isActive: true, metadata: {},\n })\n schedules.push({\n id: uid(), tenantId: 'mock', kind: 'working_hours',\n assigneeId: prof.id, locationId: prof.locationId,\n dayOfWeek: day, specificDate: null,\n startsAt: '13:00', endsAt: '18:00', isActive: true, metadata: {},\n })\n }\n // Saturday 08:00-14:00\n schedules.push({\n id: uid(), tenantId: 'mock', kind: 'working_hours',\n assigneeId: prof.id, locationId: prof.locationId,\n dayOfWeek: 6, specificDate: null,\n startsAt: '08:00', endsAt: '14:00', isActive: true, metadata: {},\n })\n }\n return schedules\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-populated agenda data. Any omitted collection falls back to the built-in\n * salon-style sample. Pass `bookings` (and optionally an empty `professionals`)\n * to render a calendar seeded with app-specific events.\n */\nexport interface MockAgendaSeed {\n bookings?: CalendarBooking[]\n professionals?: Professional[]\n schedules?: Schedule[]\n}\n\nexport interface MockAgendaProviderOptions {\n seed?: MockAgendaSeed\n}\n\nexport function createMockAgendaProvider(options?: MockAgendaProviderOptions): AgendaDataProvider {\n const seed = options?.seed\n const bookings: CalendarBooking[] = seed?.bookings ? [...seed.bookings] : createSampleBookings()\n const schedules: Schedule[] = seed?.schedules ? [...seed.schedules] : createSampleSchedules()\n const professionals: Professional[] = seed?.professionals ? [...seed.professionals] : [...SAMPLE_PROFESSIONALS]\n\n return {\n async getLocations(): Promise<Array<{ id: string; name: string }>> {\n return []\n },\n async getBookings(query: BookingQuery): Promise<CalendarBooking[]> {\n return bookings.filter((b) => {\n if (query.kind && b.kind !== query.kind) return false\n if (query.statuses?.length && !query.statuses.includes(b.status)) return false\n if (query.professionalIds?.length && !query.professionalIds.includes(b.professionalId ?? '')) return false\n if (query.locationId && b.locationId !== query.locationId) return false\n if (query.dateRange) {\n if (b.startsAt > query.dateRange.end || (b.endsAt ?? b.startsAt) < query.dateRange.start) return false\n }\n return true\n })\n },\n\n async getBookingById(id: string): Promise<CalendarBooking | null> {\n return bookings.find((b) => b.id === id) ?? null\n },\n\n async createBooking(input: CreateBookingInput): Promise<CalendarBooking> {\n const totalDuration = input.services.reduce((sum, s) => sum + s.durationMinutes, 0)\n const totalPrice = input.services.reduce((sum, s) => sum + s.price, 0)\n const booking: CalendarBooking = {\n id: uid(), tenantId: 'mock', kind: input.kind ?? 'appointment',\n startsAt: input.startsAt, endsAt: addMinutes(input.startsAt, totalDuration || 30),\n status: 'scheduled', notes: input.notes ?? null,\n orderId: input.services.length > 0 ? uid() : null, locationId: input.locationId ?? null, metadata: {},\n clientId: input.clientId, clientName: input.title?.trim() || 'New Client', clientPhone: null, clientEmail: null, clientAvatarUrl: null,\n professionalId: input.professionalId,\n professionalName: professionals.find((p) => p.id === input.professionalId)?.name ?? 'Unknown',\n professionalAvatarUrl: null,\n locationName: null, orderTotal: totalPrice, orderStatus: 'draft',\n services: input.services.map((s) => ({\n id: uid(), serviceId: s.serviceId, name: s.name,\n durationMinutes: s.durationMinutes, price: s.price,\n assigneeId: s.assigneeId ?? input.professionalId,\n })),\n totalDurationMinutes: totalDuration, createdAt: now(), updatedAt: now(),\n }\n bookings.push(booking)\n return booking\n },\n\n async updateBooking(id: string, data: UpdateBookingInput): Promise<CalendarBooking> {\n const idx = bookings.findIndex((b) => b.id === id)\n if (idx === -1) throw new Error('Booking not found')\n const existing = bookings[idx]\n const serviceUpdates: Partial<CalendarBooking> = {}\n if (data.services) {\n serviceUpdates.services = data.services.map((s) => ({\n id: uid(), serviceId: s.serviceId, name: s.name,\n durationMinutes: s.durationMinutes, price: s.price,\n assigneeId: s.assigneeId ?? existing.professionalId ?? '',\n }))\n serviceUpdates.totalDurationMinutes = data.services.reduce((sum, s) => sum + s.durationMinutes, 0)\n serviceUpdates.orderTotal = data.services.reduce((sum, s) => sum + s.price, 0)\n }\n const updated: CalendarBooking = {\n ...existing,\n ...(data.startsAt && { startsAt: data.startsAt }),\n ...(data.endsAt && { endsAt: data.endsAt }),\n ...(data.title !== undefined && { clientName: data.title }),\n ...(data.status && { status: data.status }),\n ...(data.notes !== undefined && { notes: data.notes ?? null }),\n ...(data.professionalId && { professionalId: data.professionalId }),\n ...(data.clientId && { clientId: data.clientId }),\n ...(data.locationId && { locationId: data.locationId }),\n ...serviceUpdates,\n updatedAt: now(),\n }\n bookings[idx] = updated\n return updated\n },\n\n async deleteBooking(id: string): Promise<void> {\n const idx = bookings.findIndex((b) => b.id === id)\n if (idx !== -1) bookings.splice(idx, 1)\n },\n\n async updateBookingStatus(id: string, status: string): Promise<CalendarBooking> {\n const idx = bookings.findIndex((b) => b.id === id)\n if (idx === -1) throw new Error('Booking not found')\n bookings[idx] = { ...bookings[idx], status: status as BookingStatus, updatedAt: now() }\n return bookings[idx]\n },\n\n async checkConflict(params: ConflictCheckParams): Promise<boolean> {\n return bookings.some((b) => {\n if (params.excludeBookingId && b.id === params.excludeBookingId) return false\n if (b.professionalId !== params.assigneeId) return false\n if (b.status === 'cancelled' || b.status === 'no_show') return false\n return timeOverlaps(b.startsAt, b.endsAt ?? b.startsAt, params.startsAt, params.endsAt)\n })\n },\n\n async getAvailableSlots(params: AvailableSlotsParams): Promise<TimeSlot[]> {\n // Parse 'YYYY-MM-DD' as LOCAL midnight (not UTC) so the weekday and the\n // generated slot instants land on the requested calendar day in any tz.\n const [yy, mm, dd] = params.date.split('-').map(Number)\n const date = new Date(yy, (mm ?? 1) - 1, dd ?? 1)\n const dayOfWeek = date.getDay()\n const interval = params.slotInterval ?? 30\n\n // Get working hours for this professional on this day\n const daySchedules = schedules.filter((s) =>\n s.assigneeId === params.assigneeId && s.isActive &&\n (s.dayOfWeek === dayOfWeek || s.specificDate === params.date)\n )\n\n const slots: TimeSlot[] = []\n for (const sched of daySchedules) {\n const [startH, startM] = sched.startsAt.split(':').map(Number)\n const [endH, endM] = sched.endsAt.split(':').map(Number)\n const schedStart = new Date(date); schedStart.setHours(startH, startM, 0, 0)\n const schedEnd = new Date(date); schedEnd.setHours(endH, endM, 0, 0)\n\n let slotStart = new Date(schedStart)\n while (true) {\n const slotEnd = new Date(slotStart.getTime() + params.durationMinutes * 60000)\n if (slotEnd > schedEnd) break\n const startIso = slotStart.toISOString()\n const endIso = slotEnd.toISOString()\n const hasConflict = bookings.some((b) => {\n if (b.professionalId !== params.assigneeId) return false\n if (b.status === 'cancelled' || b.status === 'no_show') return false\n return timeOverlaps(b.startsAt, b.endsAt ?? b.startsAt, startIso, endIso)\n })\n if (!hasConflict) {\n slots.push({ start: startIso, end: endIso })\n }\n slotStart = new Date(slotStart.getTime() + interval * 60000)\n }\n }\n return slots\n },\n\n async getSchedules(professionalId?: string): Promise<Schedule[]> {\n if (professionalId) return schedules.filter((s) => s.assigneeId === professionalId)\n return [...schedules]\n },\n\n async saveSchedule(input: SaveScheduleInput): Promise<Schedule> {\n const schedule: Schedule = {\n id: uid(), tenantId: 'mock', kind: 'working_hours',\n assigneeId: input.assigneeId, locationId: input.locationId ?? null,\n dayOfWeek: input.dayOfWeek ?? null, specificDate: input.specificDate ?? null,\n startsAt: input.startsAt, endsAt: input.endsAt,\n isActive: input.isActive !== false, metadata: input.metadata ?? {},\n }\n schedules.push(schedule)\n return schedule\n },\n\n async deleteSchedule(id: string): Promise<void> {\n const idx = schedules.findIndex((s) => s.id === id)\n if (idx !== -1) schedules.splice(idx, 1)\n },\n\n async getProfessionals(): Promise<Professional[]> {\n return [...professionals]\n },\n\n async getConfirmationsPending(daysAhead = 2): Promise<CalendarBooking[]> {\n const cutoff = new Date()\n cutoff.setDate(cutoff.getDate() + daysAhead)\n return bookings.filter((b) =>\n b.status === 'scheduled' && new Date(b.startsAt) <= cutoff && new Date(b.startsAt) >= new Date()\n )\n },\n\n async sendConfirmation(bookingId: string, channel: string): Promise<void> {\n const booking = bookings.find((b) => b.id === bookingId)\n if (!booking) throw new Error('Booking not found')\n const confirmations = (booking.metadata.confirmations as any[] ?? [])\n confirmations.push({ channel, sentAt: now(), status: 'sent' })\n booking.metadata = { ...booking.metadata, confirmations }\n },\n\n async completeBooking(bookingId: string): Promise<{ booking: CalendarBooking; orderId: string }> {\n const idx = bookings.findIndex((b) => b.id === bookingId)\n if (idx === -1) throw new Error('Booking not found')\n bookings[idx] = { ...bookings[idx], status: 'completed', updatedAt: now() }\n return { booking: bookings[idx], orderId: bookings[idx].orderId ?? '' }\n },\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EACV,eAAe,EAAE,YAAY,EAAE,QAAQ,EAGxC,MAAM,UAAU,CAAA;AAkIjB;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CA8LhG"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EACV,eAAe,EAAE,YAAY,EAAE,QAAQ,EAGxC,MAAM,UAAU,CAAA;AAkIjB;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CAiMhG"}