export interface PageInfo { pageSize: number; totalRows: number; isFirstPage: boolean; isLastPage: boolean; page: number; } export interface InterestsResponse { list: Interest[]; PageInfo: PageInfo; } export enum Table { Interest = "mbs9hjauug4eseo", } export const getNocoDbConfiguration = () => useRuntimeConfig().nocodb; export const createTableUrl = (table: Table) => `${getNocoDbConfiguration().url}/api/v2/tables/${table}/records`; export const getInterests = async () => $fetch(createTableUrl(Table.Interest), { headers: { "xc-token": getNocoDbConfiguration().token, }, params: { limit: 1000, }, }); export const getInterestById = async (id: string) => $fetch(`${createTableUrl(Table.Interest)}/${id}`, { headers: { "xc-token": getNocoDbConfiguration().token, }, }); export const updateInterest = async (id: string, data: Partial) => { // Create a clean data object that matches the InterestsRequest schema // Remove any properties that are not in the schema or shouldn't be sent const cleanData: Record = {}; // Only include fields that are part of the InterestsRequest schema const allowedFields = [ "Full Name", "Yacht Name", "Length", "Address", "Email Address", "Sales Process Level", "Phone Number", "Extra Comments", "Berth Size Desired", "LOI-NDA Document", "Date Added", "Width", "Depth", "Created At", "Request More Information", "Source", "Place of Residence", "Contact Method Preferred", "Request Form Sent", "Berth Number", "EOI Time Sent", "Lead Category", "Request More Info - To Sales", "EOI Send to Sales", "Time LOI Sent", "EOI Status", "Berth Info Sent Status", "Contract Sent Status", "Deposit 10% Status", "Contract Status", ]; // Filter the data to only include allowed fields for (const field of allowedFields) { if (field in data) { cleanData[field] = (data as any)[field]; } } return $fetch(createTableUrl(Table.Interest), { method: "PATCH", headers: { "xc-token": getNocoDbConfiguration().token, }, body: { Id: id, // This identifies the record to update ...cleanData, // These are the fields to update }, }); }; export const createInterest = async (data: Partial) => { // Create a clean data object that matches the InterestsRequest schema const cleanData: Record = {}; // Only include fields that are part of the InterestsRequest schema const allowedFields = [ "Full Name", "Yacht Name", "Length", "Address", "Email Address", "Sales Process Level", "Phone Number", "Extra Comments", "Berth Size Desired", "Date Added", "Width", "Depth", "Source", "Place of Residence", "Contact Method Preferred", "Lead Category", "EOI Status", "Berth Info Sent Status", "Contract Sent Status", "Deposit 10% Status", "Contract Status", ]; // Filter the data to only include allowed fields for (const field of allowedFields) { if (field in data) { cleanData[field] = (data as any)[field]; } } // Remove any computed or relation fields that shouldn't be sent delete cleanData.Id; delete cleanData.Berths; delete cleanData["Berth Recommendations"]; delete cleanData.Berth; return $fetch(createTableUrl(Table.Interest), { method: "POST", headers: { "xc-token": getNocoDbConfiguration().token, }, body: cleanData, }); }; export const deleteInterest = async (id: string) => $fetch(`${createTableUrl(Table.Interest)}/${id}`, { method: "DELETE", headers: { "xc-token": getNocoDbConfiguration().token, }, }); export const triggerWebhook = async (url: string, payload: any) => $fetch(url, { method: "POST", body: payload, });