import { createEvents } from "ics"; import { calendar } from "../entity/club/calendar"; import moment from "moment"; import { CLUB_NAME, CLUB_WEBSITE, MAIL_USERNAME } from "../env.defaults"; export abstract class CalendarHelper { public static buildICS(entries: Array): { error?: Error; value?: string } { return createEvents( entries.map((i) => ({ calName: process.env.CLUB_NAME, uid: i.id, sequence: i.sequence, ...(i.allDay ? { start: moment(i.starttime) .format("YYYY-M-D") .split("-") .map((a) => parseInt(a)) as [number, number, number], end: moment(i.endtime) .format("YYYY-M-D") .split("-") .map((a) => parseInt(a)) as [number, number, number], } : { start: moment(i.starttime) .format("YYYY-M-D-H-m") .split("-") .map((a) => parseInt(a)) as [number, number, number, number, number], end: moment(i.endtime) .format("YYYY-M-D-H-m") .split("-") .map((a) => parseInt(a)) as [number, number, number, number, number], }), title: i.title, description: i.content, location: i.location, categories: [i.type.type], organizer: { name: CLUB_NAME, email: MAIL_USERNAME }, created: moment(i.createdAt) .format("YYYY-M-D-H-m") .split("-") .map((a) => parseInt(a)) as [number, number, number, number, number], lastModified: moment(i.updatedAt) .format("YYYY-M-D-H-m") .split("-") .map((a) => parseInt(a)) as [number, number, number, number, number], transp: "OPAQUE" as "OPAQUE", status: "CONFIRMED", ...(CLUB_WEBSITE != "" ? { url: CLUB_WEBSITE } : {}), alarms: [ { action: "display", summary: "Erinnerung", trigger: { minutes: 30, before: true, }, }, ], })) ); } }