@fayz-ai/plugin-reservations 0.2.0 → 0.2.3
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/{ReservationsPage-5GTINCF3.js → ReservationsPage-NLJHGAPG.js} +3 -3
- package/dist/{ReservationsPage-5GTINCF3.js.map → ReservationsPage-NLJHGAPG.js.map} +1 -1
- package/dist/{chunk-7KXGSUHT.js → chunk-CJIXUAFI.js} +13 -4
- package/dist/chunk-CJIXUAFI.js.map +1 -0
- package/dist/data/core-supabase.d.ts.map +1 -1
- package/dist/index.js +73 -5
- package/dist/index.js.map +1 -1
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-7KXGSUHT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/core-supabase.ts"],"names":[],"mappings":"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","file":"chunk-7KXGSUHT.js","sourcesContent":["import { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { ReservationsDataProvider } from './types'\nimport type {\n Reservation, CapacityRule, CapacityException, ReservationSettings,\n DaySlot, ReservationZone, ReservationTable, ReservationStatus,\n CreateReservationInput, ReservationQuery, SeatReservationInput,\n ReservationsSummary, Occasion,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Reservations, over the plugin's own schema.\n//\n// public.plg_reservations the reservations\n// public.plg_reservations_capacity_rules the weekly grid\n// public.plg_reservations_capacity_exceptions what overrides it\n// public.plg_reservations_settings the policy\n// public.v_reservations the reservation with names\n// public.reservations_day_capacity(date) the slots of a day\n//\n// The salão is BORROWED, not copied: zones and mesas are plugin-tables' tables.\n// Capacity is per praça for one reason — the V1 keeps them apart\n// (`service_locations` for capacity, `restaurant_sections` for the mesa) and its\n// own document records the consequence: \"nada na tela avisa\", so whoever\n// registered the praças cannot find those names when configuring the lotação.\n// ---------------------------------------------------------------------------\n\nconst RESERVATIONS = 'plg_reservations'\nconst VIEW = 'v_reservations'\nconst RULES = 'plg_reservations_capacity_rules'\nconst EXCEPTIONS = 'plg_reservations_capacity_exceptions'\nconst SETTINGS = 'plg_reservations_settings'\nconst ZONES = 'plg_tables_zones'\nconst TABLES_VIEW = 'v_tables'\n\nexport const DEFAULT_SETTINGS: ReservationSettings = {\n capacityMode: 'no_duration',\n defaultDurationMinutes: 120,\n minAdvanceHours: 24,\n maxAdvanceDays: 90,\n autoConfirm: false,\n requirePhone: true,\n requireEmail: false,\n}\n\nexport interface CoreReservationsWriteOptions {\n /** The active org, stamped on insert. RLS checks it again on the way in. */\n tenantId: () => string | undefined | null\n /**\n * How a seated party becomes a comanda.\n *\n * NOT reimplemented here. Opening a comanda means inserting into\n * `public.orders`, drawing a number off the app's own sequence and writing\n * `plg_tables_order_extensions` — that is plugin-tables' `seatGuests`, and a\n * second copy of it is how two screens start numbering comandas in two\n * series. The app wires its tables provider in; see resto-saas\n * `src/restaurant/reservations.ts`.\n *\n * Absent, seating still moves the status — it just leaves no comanda, and the\n * screen says as much rather than pretending.\n */\n openComanda?: (input: { tableId: string; guests: number; notes?: string }) => Promise<{ orderId?: string }>\n}\n\nexport interface CoreReservationsProviderOptions {\n writes?: CoreReservationsWriteOptions\n}\n\nconst READ_ONLY = 'This provider reads reservations; pass `writes` to let the app that owns it change them.'\n\n/** \"HH:MM:SS\" from Postgres → \"HH:MM\" for a form. Null stays undefined. */\nfunction hhmm(value?: string | null): string | undefined {\n if (!value) return undefined\n return value.slice(0, 5)\n}\n\nexport function createCoreReservationsProvider(\n options?: CoreReservationsProviderOptions,\n): ReservationsDataProvider {\n const db = () => {\n const client = getSupabaseClientOptional() as any\n if (!client) throw new Error('Supabase client is not configured')\n return client\n }\n\n function requireWrites(): CoreReservationsWriteOptions {\n if (!options?.writes) throw new Error(READ_ONLY)\n return options.writes\n }\n\n function tenant(): string {\n const id = requireWrites().tenantId()\n if (!id) throw new Error('No active tenant')\n return id\n }\n\n function rowToReservation(r: any): Reservation {\n return {\n id: r.id,\n personId: r.person_id ?? undefined,\n guestName: r.guest_name,\n phone: r.phone ?? undefined,\n email: r.email ?? undefined,\n zoneId: r.zone_id ?? undefined,\n zoneName: r.zone_name ?? undefined,\n zoneColor: r.zone_color ?? undefined,\n tableId: r.table_id ?? undefined,\n tableNumber: r.table_number ?? undefined,\n reservedOn: r.reserved_on,\n startTime: hhmm(r.start_time) ?? '00:00',\n endTime: hhmm(r.end_time),\n partySize: r.party_size,\n occasion: (r.occasion ?? undefined) as Occasion | undefined,\n notes: r.notes ?? undefined,\n status: r.status as ReservationStatus,\n orderId: r.order_id ?? undefined,\n orderReference: r.order_reference ?? undefined,\n seatedAt: r.seated_at ?? undefined,\n tenantId: r.tenant_id,\n createdAt: r.created_at,\n updatedAt: r.updated_at,\n }\n }\n\n async function byId(id: string): Promise<Reservation> {\n const { data, error } = await db().from(VIEW).select('*').eq('id', id).maybeSingle()\n if (error) throw new Error(error.message)\n if (!data) throw new Error('Reserva não encontrada')\n return rowToReservation(data)\n }\n\n /** The columns a write touches. `undefined` means \"leave alone\"; the caller\n * clears a field by passing null through `Partial`. */\n function toRow(input: Partial<CreateReservationInput>): Record<string, unknown> {\n const row: Record<string, unknown> = {}\n if (input.personId !== undefined) row.person_id = input.personId || null\n if (input.guestName !== undefined) row.guest_name = input.guestName\n if (input.phone !== undefined) row.phone = input.phone || null\n if (input.email !== undefined) row.email = input.email || null\n if (input.zoneId !== undefined) row.zone_id = input.zoneId || null\n if (input.tableId !== undefined) row.table_id = input.tableId || null\n if (input.reservedOn !== undefined) row.reserved_on = input.reservedOn\n if (input.startTime !== undefined) row.start_time = input.startTime\n if (input.endTime !== undefined) row.end_time = input.endTime || null\n if (input.partySize !== undefined) row.party_size = input.partySize\n if (input.occasion !== undefined) row.occasion = input.occasion || null\n if (input.notes !== undefined) row.notes = input.notes || null\n if (input.status !== undefined) row.status = input.status\n return row\n }\n\n return {\n async getReservations(query?: ReservationQuery): Promise<Reservation[]> {\n let q = db().from(VIEW).select('*')\n .order('reserved_on').order('start_time')\n if (query?.from) q = q.gte('reserved_on', query.from)\n if (query?.to) q = q.lte('reserved_on', query.to)\n if (query?.zoneId) q = q.eq('zone_id', query.zoneId)\n if (query?.status) {\n const wanted = Array.isArray(query.status) ? query.status : [query.status]\n q = q.in('status', wanted)\n }\n if (query?.search) {\n // Name OR phone — reception searches by whichever one the caller gave.\n const term = `%${query.search}%`\n q = q.or(`guest_name.ilike.${term},phone.ilike.${term}`)\n }\n const { data, error } = await q\n if (error) throw new Error(error.message)\n return (data ?? []).map(rowToReservation)\n },\n\n async getReservation(id: string): Promise<Reservation | null> {\n const { data, error } = await db().from(VIEW).select('*').eq('id', id).maybeSingle()\n if (error) throw new Error(error.message)\n return data ? rowToReservation(data) : null\n },\n\n async createReservation(input: CreateReservationInput): Promise<Reservation> {\n const tenantId = tenant()\n const { data, error } = await db().from(RESERVATIONS)\n .insert({ ...toRow(input), tenant_id: tenantId })\n .select('id').single()\n if (error) throw new Error(error.message)\n return byId(data.id)\n },\n\n async updateReservation(id: string, data: Partial<CreateReservationInput>): Promise<Reservation> {\n requireWrites()\n const patch = toRow(data)\n if (Object.keys(patch).length) {\n const { error } = await db().from(RESERVATIONS).update(patch).eq('id', id)\n if (error) throw new Error(error.message)\n }\n return byId(id)\n },\n\n async setStatus(id: string, status: ReservationStatus): Promise<Reservation> {\n requireWrites()\n if (status === 'seated') {\n throw new Error('Acomodar abre a comanda — use \"sentar\" em vez de marcar o estado.')\n }\n const { error } = await db().from(RESERVATIONS).update({ status }).eq('id', id)\n if (error) throw new Error(error.message)\n return byId(id)\n },\n\n async deleteReservation(id: string): Promise<void> {\n requireWrites()\n const { error } = await db().from(RESERVATIONS).delete().eq('id', id)\n if (error) throw new Error(error.message)\n },\n\n async seatReservation(input: SeatReservationInput): Promise<Reservation> {\n const writes = requireWrites()\n const reservation = await byId(input.reservationId)\n if (reservation.status === 'seated') throw new Error('Esta reserva já foi acomodada')\n if (reservation.status === 'cancelled') throw new Error('Reserva cancelada não senta')\n\n const guests = input.guests ?? reservation.partySize\n // The comanda first: if it fails, the reservation is untouched and\n // reception tries another mesa. Marking `seated` and then failing to open\n // would leave a party the floor plan cannot see.\n let orderId: string | undefined\n if (writes.openComanda) {\n const opened = await writes.openComanda({\n tableId: input.tableId,\n guests,\n notes: `Reserva · ${reservation.guestName}`,\n })\n orderId = opened.orderId\n }\n\n const { error } = await db().from(RESERVATIONS).update({\n status: 'seated',\n table_id: input.tableId,\n party_size: guests,\n order_id: orderId ?? null,\n seated_at: new Date().toISOString(),\n }).eq('id', input.reservationId)\n if (error) throw new Error(error.message)\n return byId(input.reservationId)\n },\n\n // -- The grid ------------------------------------------------------------\n\n async getDayCapacity(date: string): Promise<DaySlot[]> {\n const { data, error } = await db().rpc('reservations_day_capacity', { p_date: date })\n if (error) throw new Error(error.message)\n return (data ?? []).map((s: any) => ({\n zoneId: s.zone_id ?? undefined,\n zoneName: s.zone_name ?? undefined,\n zoneColor: s.zone_color ?? undefined,\n startTime: hhmm(s.start_time) ?? '00:00',\n endTime: hhmm(s.end_time) ?? '23:59',\n capacity: Number(s.capacity) || 0,\n booked: Number(s.booked) || 0,\n remaining: Number(s.remaining) || 0,\n isException: !!s.is_exception,\n }))\n },\n\n async getCapacityRules(): Promise<CapacityRule[]> {\n const { data, error } = await db().from(RULES)\n .select('*, plg_tables_zones(name)').order('start_time')\n if (error) throw new Error(error.message)\n return (data ?? []).map((r: any) => ({\n id: r.id,\n zoneId: r.zone_id ?? undefined,\n zoneName: r.plg_tables_zones?.name ?? undefined,\n capacity: r.capacity,\n startTime: hhmm(r.start_time) ?? '00:00',\n endTime: hhmm(r.end_time) ?? '23:59',\n weekdays: (r.weekdays ?? []).map(Number),\n durationMinutes: r.duration_minutes ?? undefined,\n isActive: r.is_active !== false,\n tenantId: r.tenant_id,\n }))\n },\n\n async saveCapacityRule(rule): Promise<CapacityRule> {\n const tenantId = tenant()\n const row: Record<string, unknown> = {\n tenant_id: tenantId,\n zone_id: rule.zoneId || null,\n capacity: rule.capacity,\n start_time: rule.startTime,\n end_time: rule.endTime,\n weekdays: rule.weekdays ?? [0, 1, 2, 3, 4, 5, 6],\n duration_minutes: rule.durationMinutes ?? null,\n is_active: rule.isActive !== false,\n }\n const q = rule.id\n ? db().from(RULES).update(row).eq('id', rule.id)\n : db().from(RULES).insert(row)\n const { data, error } = await q.select('id').single()\n if (error) throw new Error(error.message)\n const all = await this.getCapacityRules()\n return all.find((r) => r.id === data.id)!\n },\n\n async deleteCapacityRule(id: string): Promise<void> {\n requireWrites()\n const { error } = await db().from(RULES).delete().eq('id', id)\n if (error) throw new Error(error.message)\n },\n\n async getCapacityExceptions(): Promise<CapacityException[]> {\n const { data, error } = await db().from(EXCEPTIONS)\n .select('*, plg_tables_zones(name)').order('starts_on')\n if (error) throw new Error(error.message)\n return (data ?? []).map((e: any) => ({\n id: e.id,\n zoneId: e.zone_id ?? undefined,\n zoneName: e.plg_tables_zones?.name ?? undefined,\n startsOn: e.starts_on,\n endsOn: e.ends_on,\n startTime: hhmm(e.start_time),\n endTime: hhmm(e.end_time),\n capacity: e.capacity,\n reason: e.reason ?? undefined,\n tenantId: e.tenant_id,\n }))\n },\n\n async saveCapacityException(ex): Promise<CapacityException> {\n const tenantId = tenant()\n const row: Record<string, unknown> = {\n tenant_id: tenantId,\n zone_id: ex.zoneId || null,\n starts_on: ex.startsOn,\n ends_on: ex.endsOn ?? ex.startsOn,\n start_time: ex.startTime || null,\n end_time: ex.endTime || null,\n capacity: ex.capacity ?? 0,\n reason: ex.reason || null,\n }\n const q = ex.id\n ? db().from(EXCEPTIONS).update(row).eq('id', ex.id)\n : db().from(EXCEPTIONS).insert(row)\n const { data, error } = await q.select('id').single()\n if (error) throw new Error(error.message)\n const all = await this.getCapacityExceptions()\n return all.find((e) => e.id === data.id)!\n },\n\n async deleteCapacityException(id: string): Promise<void> {\n requireWrites()\n const { error } = await db().from(EXCEPTIONS).delete().eq('id', id)\n if (error) throw new Error(error.message)\n },\n\n // -- The policy ----------------------------------------------------------\n\n async getSettings(): Promise<ReservationSettings> {\n const { data, error } = await db().from(SETTINGS).select('*').maybeSingle()\n if (error) throw new Error(error.message)\n if (!data) return { ...DEFAULT_SETTINGS }\n return {\n capacityMode: data.capacity_mode,\n defaultDurationMinutes: data.default_duration_minutes,\n minAdvanceHours: data.min_advance_hours,\n maxAdvanceDays: data.max_advance_days,\n autoConfirm: !!data.auto_confirm,\n requirePhone: !!data.require_phone,\n requireEmail: !!data.require_email,\n }\n },\n\n async saveSettings(settings: ReservationSettings): Promise<ReservationSettings> {\n const tenantId = tenant()\n const { error } = await db().from(SETTINGS).upsert({\n tenant_id: tenantId,\n capacity_mode: settings.capacityMode,\n default_duration_minutes: settings.defaultDurationMinutes,\n min_advance_hours: settings.minAdvanceHours,\n max_advance_days: settings.maxAdvanceDays,\n auto_confirm: settings.autoConfirm,\n require_phone: settings.requirePhone,\n require_email: settings.requireEmail,\n }, { onConflict: 'tenant_id' })\n if (error) throw new Error(error.message)\n return settings\n },\n\n // -- The salão, borrowed -------------------------------------------------\n\n async getZones(): Promise<ReservationZone[]> {\n const { data, error } = await db().from(ZONES)\n .select('id, name, color').eq('is_active', true).order('sort_order')\n // A house that has not installed the floor plan yet is not an error: the\n // grid falls back to the restaurant as a whole.\n if (error) return []\n return (data ?? []).map((z: any) => ({ id: z.id, name: z.name, color: z.color ?? undefined }))\n },\n\n async getTables(zoneId?: string): Promise<ReservationTable[]> {\n let q = db().from(TABLES_VIEW).select('id, number, name, seats, zone_id, status').order('number')\n if (zoneId) q = q.eq('zone_id', zoneId)\n const { data, error } = await q\n if (error) return []\n return (data ?? []).map((t: any) => ({\n id: t.id,\n number: t.number,\n name: t.name ?? undefined,\n seats: t.seats ?? 0,\n zoneId: t.zone_id ?? undefined,\n // `occupied` is derived by v_tables from the open comanda — the one\n // fact, read here too rather than guessed from a stored column.\n isOccupied: t.status === 'occupied',\n }))\n },\n\n async getSummary(date: string): Promise<ReservationsSummary> {\n const { data, error } = await db().from(RESERVATIONS)\n .select('status, party_size').eq('reserved_on', date)\n if (error) throw new Error(error.message)\n const rows = data ?? []\n const count = (s: ReservationStatus) => rows.filter((r: any) => r.status === s).length\n return {\n total: rows.length,\n pending: count('pending'),\n confirmed: count('confirmed'),\n seated: count('seated'),\n noShow: count('no_show'),\n cancelled: count('cancelled'),\n // Cancelled and no-show do not eat. This is the number the kitchen\n // plans against, not the row count.\n expectedGuests: rows\n .filter((r: any) => !['cancelled', 'no_show'].includes(r.status))\n .reduce((sum: number, r: any) => sum + (r.party_size ?? 0), 0),\n }\n },\n }\n}\n"]}
|