provide ics link
This commit is contained in:
parent
8c597fd68d
commit
91c3fde688
8 changed files with 155 additions and 4 deletions
|
@ -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()
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue