import { google } from 'googleapis' import { Booking } from '../db/booking' const calendarId = process.env.GOOGLE_CALENDAR_ID let credentials: object try { credentials = JSON.parse(process.env.GOOGLE_SERVICE_ACCOUNT_KEY_JSON); } catch (error) { console.error('Unable to parse process.env.GOOGLE_SERVICE_ACCOUNT_KEY_JSON - invalid JSON?'); throw error; } const auth = new google.auth.GoogleAuth({ credentials, scopes: [ 'https://www.googleapis.com/auth/calendar', ], }) const calendar = google.calendar({ version: 'v3', auth, }) export async function getNewEvents() { const { data } = await calendar.events.list({ calendarId, timeMin: new Date().toISOString(), }) return data.items } function getSummary(booking: Partial): string { let summary = '' if (booking.org) { summary += `${booking.org} - ` } summary += booking.name return summary } export async function createCalendarEvent(booking: Booking): Promise { const response = await calendar.events.insert({ calendarId, requestBody: { summary: getSummary(booking), // TODO: description, start: { date: booking.startDate }, end: { date: booking.endDate }, }, }, {}) booking.calendarEventId = response.data.id return booking } export async function deleteCalendarEvent(booking: Booking) { await calendar.events.delete({ calendarId, eventId: booking.calendarEventId, }) booking.calendarEventId = null } //export async function patchCalendarEvent(booking: { calendarEventId: string } & Partial ) : Promise { // const response = await calendar.events.patch({ // calendarId, // eventId: booking.calendarEventId, // }); // // return booking; //}