provide ics link

This commit is contained in:
Julian Krauser 2024-11-07 10:49:34 +01:00
parent 8c597fd68d
commit 91c3fde688
8 changed files with 155 additions and 4 deletions

View file

@ -43,6 +43,14 @@ export default abstract class CalendarCommandHandler {
* @returns {Promise<void>}
*/
static async update(updateCalendar: UpdateCalendarCommand): Promise<void> {
let sequence = await dataSource
.getRepository(calendar)
.createQueryBuilder("calendar")
.where("id = :id", { id: updateCalendar.id })
.getOneOrFail()
.then((res) => {
return res.sequence;
});
return await dataSource
.createQueryBuilder()
.update(calendar)
@ -58,6 +66,7 @@ export default abstract class CalendarCommandHandler {
.createQueryBuilder("type")
.where("id = :id", { id: updateCalendar.typeId })
.getOneOrFail(),
sequence: sequence + 1,
})
.where("id = :id", { id: updateCalendar.id })
.execute()

View file

@ -31,7 +31,7 @@ export async function getAllCalendarItems(req: Request, res: Response): Promise<
* @returns {Promise<*>}
*/
export async function getCalendarItemById(req: Request, res: Response): Promise<any> {
const id = parseInt(req.params.id);
const id = req.params.id;
let item = await CalendarService.getById(id);
res.json(CalendarFactory.mapToSingle(item));

View file

@ -3,6 +3,8 @@ import CalendarFactory from "../factory/admin/calendar";
import CalendarService from "../service/calendarService";
import CalendarTypeService from "../service/calendarTypeService";
import { calendar } from "../entity/calendar";
import { createEvents } from "ics";
import moment from "moment";
/**
* @description get all calendar items by types or nscdr
@ -21,5 +23,49 @@ export async function getCalendarItemsByTypes(req: Request, res: Response): Prom
items = await CalendarService.getByTypeNSCDR();
}
res.json(CalendarFactory.mapToBase(items));
moment()
.format("YYYY-M-D-H-m")
.split("-")
.map((a) => parseInt(a));
let events = createEvents(
items.map((i) => ({
calName: process.env.CLUB_NAME,
uid: i.id,
sequence: 1,
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],
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",
url: "https://www.ff-merching.de",
alarms: [
{
action: "display",
description: "Erinnerung",
trigger: {
minutes: 30,
before: true,
},
},
],
}))
);
res.type("ics").send(events.value);
}

View file

@ -6,6 +6,8 @@ import {
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
AfterUpdate,
BeforeUpdate,
} from "typeorm";
import { calendarType } from "./calendarType";
@ -32,6 +34,9 @@ export class calendar {
@Column({ type: "boolean", default: false })
allDay: boolean;
@Column({ type: "int", default: 1 })
sequence: number;
@CreateDateColumn()
createdAt: Date;

View file

@ -30,6 +30,7 @@ export class Calendar1729947763295 implements MigrationInterface {
{ name: "content", type: "text", isNullable: true },
{ name: "allDay", type: "tinyint", isNullable: false, default: 0 },
{ name: "location", type: "text", isNullable: true },
{ name: "sequence", type: variableType_int, default: 1 },
{ name: "createdAt", type: "datetime", precision: 6, isNullable: false, default: "CURRENT_TIMESTAMP(6)" },
{
name: "updatedAt",

View file

@ -25,7 +25,7 @@ export default abstract class CalendarService {
* @description get calendar by id
* @returns {Promise<calendar>}
*/
static async getById(id: number): Promise<calendar> {
static async getById(id: string): Promise<calendar> {
return await dataSource
.getRepository(calendar)
.createQueryBuilder("calendar")
@ -68,7 +68,7 @@ export default abstract class CalendarService {
.getRepository(calendar)
.createQueryBuilder("calendar")
.leftJoinAndSelect("calendar.type", "type")
.where("type.nscdr = :nscdr)", { nscdr: true })
.where("type.nscdr = :nscdr", { nscdr: true })
.getMany()
.then((res) => {
return res;