ff-admin-server/src/helpers/calendarHelper.ts

64 lines
2.1 KiB
TypeScript
Raw Normal View History

import { createEvents } from "ics";
2025-01-05 14:14:00 +01:00
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<calendar>): { 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",
2025-02-11 11:39:49 +01:00
status: "CONFIRMED",
...(CLUB_WEBSITE != "" ? { url: CLUB_WEBSITE } : {}),
alarms: [
{
action: "display",
2025-03-14 13:17:25 +01:00
summary: "Erinnerung",
trigger: {
minutes: 30,
before: true,
},
},
],
}))
);
}
}