217 lines
6.1 KiB
TypeScript
217 lines
6.1 KiB
TypeScript
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<InterestsResponse>(createTableUrl(Table.Interest), {
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
params: {
|
|
limit: 1000,
|
|
},
|
|
});
|
|
|
|
export const getInterestById = async (id: string) =>
|
|
$fetch<Interest>(`${createTableUrl(Table.Interest)}/${id}`, {
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
});
|
|
|
|
export const updateInterest = async (id: string, data: Partial<Interest>) => {
|
|
console.log('[nocodb.updateInterest] Updating interest:', id);
|
|
console.log('[nocodb.updateInterest] Data fields:', Object.keys(data));
|
|
|
|
// 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<string, any> = {};
|
|
|
|
// 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",
|
|
// Add the EOI link fields
|
|
"EOI Client Link",
|
|
"EOI David Link",
|
|
"EOI Oscar Link",
|
|
"EOI Document"
|
|
];
|
|
|
|
// Filter the data to only include allowed fields
|
|
for (const field of allowedFields) {
|
|
if (field in data) {
|
|
cleanData[field] = (data as any)[field];
|
|
}
|
|
}
|
|
|
|
console.log('[nocodb.updateInterest] Clean data fields:', Object.keys(cleanData));
|
|
|
|
const url = `${createTableUrl(Table.Interest)}/${id}`;
|
|
console.log('[nocodb.updateInterest] URL:', url);
|
|
|
|
try {
|
|
const result = await $fetch<Interest>(url, {
|
|
method: "PATCH",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
body: cleanData
|
|
});
|
|
console.log('[nocodb.updateInterest] Update successful for ID:', id);
|
|
return result;
|
|
} catch (error: any) {
|
|
console.error('[nocodb.updateInterest] Update failed:', error);
|
|
console.error('[nocodb.updateInterest] Error details:', error instanceof Error ? error.message : 'Unknown error');
|
|
|
|
// If it's a 404 error for a newly created record, provide more context
|
|
if (error.statusCode === 404 || error.status === 404) {
|
|
console.error('[nocodb.updateInterest] 404 Error - Record not found. This might happen if:');
|
|
console.error('1. The record ID is incorrect');
|
|
console.error('2. The record was just created and is not yet available');
|
|
console.error('3. The record was deleted');
|
|
console.error('Attempted URL:', url);
|
|
}
|
|
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const createInterest = async (data: Partial<Interest>) => {
|
|
console.log('[nocodb.createInterest] Creating interest with fields:', Object.keys(data));
|
|
|
|
// Create a clean data object that matches the InterestsRequest schema
|
|
const cleanData: Record<string, any> = {};
|
|
|
|
// 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;
|
|
|
|
console.log('[nocodb.createInterest] Clean data fields:', Object.keys(cleanData));
|
|
const url = createTableUrl(Table.Interest);
|
|
console.log('[nocodb.createInterest] URL:', url);
|
|
|
|
try {
|
|
const result = await $fetch<Interest>(url, {
|
|
method: "POST",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
body: cleanData,
|
|
});
|
|
console.log('[nocodb.createInterest] Created interest with ID:', result.Id);
|
|
return result;
|
|
} catch (error) {
|
|
console.error('[nocodb.createInterest] Create failed:', error);
|
|
console.error('[nocodb.createInterest] Error details:', error instanceof Error ? error.message : 'Unknown error');
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const deleteInterest = async (id: string) => {
|
|
console.log('[nocodb.deleteInterest] Deleting interest:', id);
|
|
const url = `${createTableUrl(Table.Interest)}/${id}`;
|
|
console.log('[nocodb.deleteInterest] URL:', url);
|
|
|
|
try {
|
|
const result = await $fetch(url, {
|
|
method: "DELETE",
|
|
headers: {
|
|
"xc-token": getNocoDbConfiguration().token,
|
|
},
|
|
});
|
|
console.log('[nocodb.deleteInterest] Delete successful for ID:', id);
|
|
return result;
|
|
} catch (error) {
|
|
console.error('[nocodb.deleteInterest] Delete failed:', error);
|
|
console.error('[nocodb.deleteInterest] Error details:', error instanceof Error ? error.message : 'Unknown error');
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const triggerWebhook = async (url: string, payload: any) =>
|
|
$fetch(url, {
|
|
method: "POST",
|
|
body: payload,
|
|
});
|