import { BookingDocument } from '../db/booking' import { getBaseURL } from '../helpers/url' const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY const ADMIN_EMAIL = process.env.ADMIN_EMAIL const FROM_EMAIL = process.env.FROM_EMAIL const SENDGRID_URL = 'https://api.sendgrid.com/v3/mail/send' if (!SENDGRID_API_KEY) { throw new Error('NO SENDGRID_API_KEY set!') } if (!ADMIN_EMAIL) { throw new Error('No ADMIN_EMAIL set!') } if (!FROM_EMAIL) { throw new Error('No FROM_EMAIL set!') } async function sendMail(data: object) { const fetchOptions = { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${SENDGRID_API_KEY}`, }, body: JSON.stringify(data), } const response = await fetch(SENDGRID_URL, fetchOptions) if (!response.ok) { throw new Error(`Unable to send mail`) } } function getReceivedBookingAdminText(booking: { uuid: string }) { return `Hallo lieber Admin, es ging folgende Buchung ein: ${getBaseURL()}/booking/${booking.uuid} MfG` } export async function sendReceivedBookingAdminMail(booking: BookingDocument) { const data = { personalizations: [ { to: [{ email: ADMIN_EMAIL }], }, ], from: { email: FROM_EMAIL, name: "Pfadi-Bussle Wart" }, subject: `Buchung für ${booking.days} eingegangen!`, content: [{ type: 'text/plain', value: getReceivedBookingAdminText(booking) }], } try { await sendMail(data) } catch (error) { console.error(`Failed in sendReceivedBookingMail for ${booking.uuid}`) } } function getReceivedBookingBookerText(booking: BookingDocument) { return `Hallo liebe/r ${booking.booker.name}, Vielen Dank für Deine Buchung. Nach Prüfung bestätigen wir die Buchung bald per E-Mail! Du kannst sie jederzeit unter ${getBaseURL()}/booking/${booking.uuid} einsehen und auch stornieren. Viele Grüße Thomas Ruoff Pfadi Bussle Wart Tel. 0151/212 253 62 ` } export async function sendReceivedBookingBookerMail(booking: BookingDocument) { const data = { personalizations: [ { to: [{ email: booking.booker.email, name: booking.booker.name }], }, ], from: { email: FROM_EMAIL, name: "Pfadi-Bussle Wart" }, subject: `Deine Buchung ist eingegangen!`, content: [{ type: 'text/plain', value: getReceivedBookingBookerText(booking) }], } try { await sendMail(data) } catch (error) { console.error(`Failed in sendReceivedBookingMail for ${booking.uuid}`) } }