import { createClient } from '@supabase/supabase-js' import dotenv from 'dotenv' dotenv.config() // Initialize Supabase client if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) { throw new Error('Missing Supabase environment variables'); } const supabase = createClient( process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY ) /* ****************************** ***** RESERVATION METHODS **** ****************************** The 'reservations' table columns (based on your screenshot): - id (int8) - created_at (timestamptz) - person_name (text) - phone (text) - from_date (timestamptz) - to_date (timestamptz) - persons (int4) - caparo (int8) - description (text) */ /** * Fetch reservations within a period of days. * @param {string} startDate - Start date (in ISO or any comparable format). * @param {string} endDate - End date (in ISO or any comparable format). * @returns {Promise<{ data?: Array, error?: string }>} */ export async function getReservationsForPeriod(startDate, endDate) { try { console.log('Fetching reservations for period:', startDate, endDate) if (!startDate || !endDate) { throw new Error('Invalid date range provided.') } // Adjust the logic to handle the start and end of the day const startOfDay = new Date(startDate).setHours(0, 0, 0, 0) const endOfDay = new Date(endDate).setHours(23, 59, 59, 999) const { data, error } = await supabase .from('reservations') .select('*') .gte('from_date', new Date(startOfDay).toISOString()) .lte('from_date', new Date(endOfDay).toISOString()) console.log('Data:', data) console.log('Error:', error) if (error) { console.error('Error fetching reservations:', error) return { error: 'Error fetching reservations.' } } return { data } } catch (error) { console.error('Error in getReservationsForPeriod:', error) return { error: 'Unexpected error occurred.' } } } /** * Fetch all reservations. * @returns {Promise<{ data?: Array, error?: string }>} */ export async function getAllReservations() { try { const { data, error } = await supabase .from('reservations') .select('*') if (error) { console.error('Error fetching reservations:', error) return { error: 'Error fetching reservations.' } } return { data } } catch (error) { console.error('Error in getAllReservations:', error) return { error: 'Unexpected error occurred.' } } } /** * Create a new reservation. * @param {Object} reservationData * { * person_name: string, * phone: string, * from_date: string (timestamp/ISO), * to_date: string (timestamp/ISO), * persons: number, * caparo: number, * description: string * } * @returns {Promise<{ success: boolean, error?: string }>} */ export async function createReservation(reservationData) { try { const { error } = await supabase.from('reservations').insert({ ...reservationData, created_at: new Date().toISOString(), }) if (error) { console.error('Error creating reservation:', error) return { success: false, error: 'Error creating reservation.' } } return { success: true } } catch (error) { console.error('Error in createReservation:', error) return { success: false, error: 'Unexpected error occurred.' } } } /** * Edit an existing reservation (by ID). * @param {number} reservationId - The reservation’s ID. * @param {Object} updates - Key/value pairs of columns to update. * @returns {Promise<{ success: boolean, error?: string }>} */ export async function editReservation(reservationId, updates) { try { // Example: Only update fields that are explicitly passed in 'updates' // (e.g., person_name, phone, from_date, to_date, etc.) const { error } = await supabase .from('reservations') .update(updates) .eq('id', reservationId) if (error) { console.error('Error updating reservation:', error) return { success: false, error: 'Error updating reservation.' } } return { success: true } } catch (error) { console.error('Error in editReservation:', error) return { success: false, error: 'Unexpected error occurred.' } } } /** * Update an existing reservation (by ID). * @param {number} reservationId - The reservation’s ID. * @param {Object} updates - Key/value pairs of columns to update. * @returns {Promise<{ success: boolean, error?: string }>} */ export async function updateReservation(reservationId, updates) { try { const { error } = await supabase .from('reservations') .update(updates) .eq('id', reservationId) if (error) { console.error('Error updating reservation:', error) return { success: false, error: 'Error updating reservation.' } } return { success: true } } catch (error) { console.error('Error in updateReservation:', error) return { success: false, error: 'Unexpected error occurred.' } } } /** * Delete a reservation by ID. * @param {number} reservationId - The reservation’s ID. * @returns {Promise<{ success: boolean, error?: string }>} */ export async function deleteReservation(reservationId) { try { const { error } = await supabase .from('reservations') .delete() .eq('id', reservationId) if (error) { console.error('Error deleting reservation:', error) return { success: false, error: 'Error deleting reservation.' } } return { success: true } } catch (error) { console.error('Error in deleteReservation:', error) return { success: false, error: 'Unexpected error occurred.' } } }