Something went wrong. Try again.
a tool for shared writing and social publishing
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172"use server";import { drizzle } from "drizzle-orm/node-postgres";import { eq } from "drizzle-orm";import { entities, permission_token_rights, phone_rsvps_to_entity,} from "drizzle/schema";import twilio from "twilio";import { pool } from "supabase/pool";
export async function sendUpdateToRSVPS( token: { id: string }, { entity, message, eventName, sendto, publicLeafletID, }: { entity: string; message: string; eventName: string; publicLeafletID: string; sendto: { GOING: boolean; MAYBE: boolean; NOT_GOING: boolean }; },) { let dbclient = await pool.connect(); const db = drizzle(dbclient); let token_rights = await db .select() .from(permission_token_rights) .where(eq(permission_token_rights.token, token.id));
let RSVPS = db .select() .from(phone_rsvps_to_entity) .innerJoin(entities, eq(phone_rsvps_to_entity.entity, entities.id)) .where(eq(phone_rsvps_to_entity.entity, entity));
dbclient.release();
if (!token_rights[0]?.write) return; let rsvps = await RSVPS; let entity_set = rsvps[0]?.entities.set; if (!token_rights.find((r) => r.entity_set === entity_set)) { return; }
const accountSid = process.env.TWILIO_ACCOUNT_SID; const authToken = process.env.TWILIO_AUTH_TOKEN; const client = twilio(accountSid, authToken);
for (let rsvp of rsvps) { if (sendto[rsvp.phone_rsvps_to_entity.status]) { let { country_code, phone_number } = rsvp.phone_rsvps_to_entity; let number = `+${country_code}${phone_number}`; await client.messages.create({ contentSid: "HX8e1217f791d38fa4cf7b7b24a02fe10c", contentVariables: JSON.stringify({ 1: eventName, 2: message, 3: `https://leaflet.pub/${publicLeafletID}`, }), from: `${country_code === "1" ? "" : "whatsapp:"}+18449523391`, messagingServiceSid: "MGffbf9a66770350b25caf3b80b9aac481", to: country_code === "1" ? number : `whatsapp:${number}`, }); } }}