Custom backend for Purrform.
at main 95 lines 3.0 kB view raw
1// helpers 2import type { DbResult } from '../lib/database.types'; 3import slotsPerDay from '../lib/slotsPerDay'; 4import supabase from '../lib/supabase'; 5import { validOrderStatuses } from '../lib/utils'; 6import getBcOrderFromSandbox from './getBcOrderFromSandbox'; 7 8export default async function testOrderAddedWebhookInSandbox( 9 orderId: number 10): Promise<boolean> { 11 console.log('Starting order added webhook (delivery slots adjustment),'); 12 13 console.log('Getting order from BC API'); 14 const order = await getBcOrderFromSandbox(orderId); 15 if (!order) { 16 return false; 17 } 18 if (order.customer_message === '') { 19 console.log('No customer message - missing delivery date'); 20 return true; 21 } 22 23 console.log('Order status:', order.status); 24 if (!validOrderStatuses.includes(order.status)) { 25 console.log('Order status is not valid'); 26 return true; 27 } 28 29 const customerMessage = order.customer_message; 30 31 const [deliveryMsg, _instructions] = customerMessage.split(' | '); 32 if (deliveryMsg == null) { 33 console.log('No delivery message found'); 34 return true; 35 } 36 37 // March 1, 2022 38 const date = new Date(deliveryMsg); 39 const timeOffset = date.getTimezoneOffset(); 40 date.setMinutes(date.getMinutes() - timeOffset); 41 const deliveryDate = date.toISOString().split('T')[0]; 42 if (deliveryDate == null) { 43 console.log('Invalid delivery date'); 44 return true; 45 } 46 47 const query = supabase 48 .from('delivery_dates') 49 .select(`id, delivery_date, delivery_slots`); 50 const deliveryDatesDbResult: DbResult<typeof query> = await query; 51 52 if (deliveryDatesDbResult.error) { 53 console.error(deliveryDatesDbResult.error.message); 54 return false; 55 } 56 57 const matchingDate = deliveryDatesDbResult.data.find( 58 (row) => row.delivery_date === deliveryDate 59 ); 60 61 if (matchingDate) { 62 const numSlots = matchingDate.delivery_slots; 63 const newNumSlots = Math.max(numSlots - 1, 0); 64 const updateQuery = supabase 65 .from('delivery_dates') 66 .update({ delivery_slots: newNumSlots }) 67 .eq('id', matchingDate.id); 68 69 const updateResult = await updateQuery; 70 if (updateResult.error) { 71 console.error(updateResult.error.message); 72 return false; 73 } 74 } else { 75 console.log('No matching date found'); 76 const numSlots = await slotsPerDay(); 77 if (numSlots == null) { 78 console.error('Error getting slots per day'); 79 return false; 80 } 81 82 // const insertQuery = supabase 83 // .from('delivery_dates') 84 // .insert([ 85 // { delivery_date: deliveryDate, delivery_slots: numSlots - 1 }, 86 // ]); 87 // const insertResult = await insertQuery; 88 // if (insertResult.error) { 89 // console.error(insertResult.error.message); 90 // return false; 91 // } 92 } 93 94 return true; 95}