// helpers import type { DbResult } from '../lib/database.types'; import slotsPerDay from '../lib/slotsPerDay'; import supabase from '../lib/supabase'; import { validOrderStatuses } from '../lib/utils'; import getBcOrderFromSandbox from './getBcOrderFromSandbox'; export default async function testOrderAddedWebhookInSandbox( orderId: number ): Promise { console.log('Starting order added webhook (delivery slots adjustment),'); console.log('Getting order from BC API'); const order = await getBcOrderFromSandbox(orderId); if (!order) { return false; } if (order.customer_message === '') { console.log('No customer message - missing delivery date'); return true; } console.log('Order status:', order.status); if (!validOrderStatuses.includes(order.status)) { console.log('Order status is not valid'); return true; } const customerMessage = order.customer_message; const [deliveryMsg, _instructions] = customerMessage.split(' | '); if (deliveryMsg == null) { console.log('No delivery message found'); return true; } // March 1, 2022 const date = new Date(deliveryMsg); const timeOffset = date.getTimezoneOffset(); date.setMinutes(date.getMinutes() - timeOffset); const deliveryDate = date.toISOString().split('T')[0]; if (deliveryDate == null) { console.log('Invalid delivery date'); return true; } const query = supabase .from('delivery_dates') .select(`id, delivery_date, delivery_slots`); const deliveryDatesDbResult: DbResult = await query; if (deliveryDatesDbResult.error) { console.error(deliveryDatesDbResult.error.message); return false; } const matchingDate = deliveryDatesDbResult.data.find( (row) => row.delivery_date === deliveryDate ); if (matchingDate) { const numSlots = matchingDate.delivery_slots; const newNumSlots = Math.max(numSlots - 1, 0); const updateQuery = supabase .from('delivery_dates') .update({ delivery_slots: newNumSlots }) .eq('id', matchingDate.id); const updateResult = await updateQuery; if (updateResult.error) { console.error(updateResult.error.message); return false; } } else { console.log('No matching date found'); const numSlots = await slotsPerDay(); if (numSlots == null) { console.error('Error getting slots per day'); return false; } // const insertQuery = supabase // .from('delivery_dates') // .insert([ // { delivery_date: deliveryDate, delivery_slots: numSlots - 1 }, // ]); // const insertResult = await insertQuery; // if (insertResult.error) { // console.error(insertResult.error.message); // return false; // } } return true; }