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

69 lines
2.3 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 SettingHelper from "./settingsHelper";
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: SettingHelper.getSetting("club.name") as string,
email: SettingHelper.getSetting("mail.username") as string,
},
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",
...(SettingHelper.getSetting("club.website") != ""
? { url: SettingHelper.getSetting("club.website") as string }
: {}),
alarms: [
{
action: "display",
2025-03-14 13:17:25 +01:00
summary: "Erinnerung",
trigger: {
minutes: 30,
before: true,
},
},
],
}))
);
}
}