diff --git a/db/booking.js b/db/booking.js index 92d8d79..da686d2 100644 --- a/db/booking.js +++ b/db/booking.js @@ -1,6 +1,6 @@ import * as mongoose from 'mongoose' -import { getDays, dateFormat } from '../helpers/date' +import { getDays, dateFormatBackend } from '../helpers/date' const BookingSchema = new mongoose.Schema( { @@ -12,10 +12,15 @@ const BookingSchema = new mongoose.Schema( startDate: { type: Date, required: true, - get: dateFormat, + get: dateFormatBackend, + min: new Date(), + }, + endDate: { + type: Date, + required: false, + get: dateFormatBackend, min: new Date(), }, - endDate: { type: Date, required: false, get: dateFormat, min: new Date() }, status: { type: String, enum: ['requested', 'confirmed', 'rejected'], diff --git a/helpers/mail.js b/helpers/mail.js new file mode 100644 index 0000000..a717404 --- /dev/null +++ b/helpers/mail.js @@ -0,0 +1,33 @@ +const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY +const SENDGRID_URL = 'https://api.sendgrid.com/v3/mail/send' +const BOOKING_ADMIN_EMAIL = 'tomru@mail.id0.link' +const FROM_EMAIL = 'thomasruoff@gmail.com' + +async function sendMail(data) { + const response = await fetch(SENDGRID_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${SENDGRID_API_KEY}`, + }, + body: JSON.stringify(data), + }) + return response.json() +} + +export async function sendReceivedBookingMail(booking) { + const data = { + personalizations: [ + { + to: [{ email: BOOKING_ADMIN_EMAIL }], + }, + ], + from: { email: FROM_EMAIL }, + subject: 'Pfadi Bussle - Buchung eingegangen!', + content: [ + { type: 'text/plain', value: `${JSON.stringify(booking, null, 4)}` }, + ], + } + + await sendMail(data) +} diff --git a/pages/api/booking.js b/pages/api/booking.js index 7c0c9d8..f1cc16c 100644 --- a/pages/api/booking.js +++ b/pages/api/booking.js @@ -1,14 +1,18 @@ import { createBooking } from '../../db/index' import { Error } from 'mongoose' +import { sendReceivedBookingMail } from '../../helpers/mail' + export default async function userHandler(req, res) { const { method } = req + let booking + switch (method) { case 'POST': try { - const data = await createBooking(req.body) - res.status(200).json(data) + booking = await createBooking(req.body) + res.status(200).json(booking) } catch (e) { console.error(e) @@ -18,6 +22,9 @@ export default async function userHandler(req, res) { } res.status(500).end(`Internal Server Error...Guru is meditating...`) } + + await sendReceivedBookingMail(booking) + console.log('sent receivedBookingMail') break default: res.setHeader('Allow', ['POST'])