export async function main(
transaction_type: "insert" | "update" | "delete",
schema_name: string,
table_name: string,
row: any,
old_row?: any
) {
console.log(`[Main] Transaction: ${transaction_type.toUpperCase()} on ${schema_name}.${table_name}`);
console.log("[Main] New row data:", row);
if (old_row) {
console.log("[Main] Old row data (update/delete):", old_row);
}
// Example: specific action for "insert" on "users" table
if (transaction_type === "insert" && table_name === "users" && row?.email) {
console.log(`[Main] New user created: ${row.email}`);
// sendWelcomeEmail(row.email);
}
// Example: log user email change
if (transaction_type === "update" && table_name === "users" && old_row?.email !== row?.email) {
console.log(`[Main] User updated email from ${old_row.email} to ${row.email}`);
// notifyEmailChange(row.id);
}
}Submitted by dieriba.pro916 368 days ago
/**
* General Trigger Preprocessor
*
* ⚠️ This function runs BEFORE the main function.
*
* It processes raw trigger data (e.g., MQTT, HTTP, SQS) before passing it to main().
* Common tasks:
* - Convert binary payloads to string/JSON
* - Extract metadata
* - Filter messages
* - Add timestamps/context
*
* The returned object determines main() parameters:
* - {a: 1, b: 2} → main(a, b)
* - {msg} → main(msg)
*
* @param event - Trigger data (e.g., MQTT, HTTP, SQS)
* @returns Processed data for main()
*/
export async function preprocessor(
event: {
kind: 'postgres',
transaction_type: "insert" | "update" | "delete",
schema_name: string,
table_name: string,
row: any,
old_row?: any
},
) {
if (event.kind === 'postgres') {
console.log(`[Preprocessor] ${event.transaction_type.toUpperCase()} on ${event.schema_name}.${event.table_name}`);
return {
row: event.row,
old_row: event.old_row
};
}
throw new Error(`Expected postgres trigger kind, got: ${event.kind}`);
}
/**
* Main Function - Handles processed trigger events
*
* ⚠️ Called AFTER preprocessor(), with its return values.
*
* @param row - New data inserted/updated
* @param old_row - Previous data (for updates/deletes)
*/
export async function main(
row: any,
old_row?: any
) {
console.log("[Main] New row data:", row);
if (old_row) {
console.log("[Main] Old row data (update/delete):", old_row);
}
if (row && row.email) {
console.log(`[Main] New user created: ${row.email}`);
// sendWelcomeEmail(row.email)
}
}Submitted by dieriba.pro916 368 days ago