Add possibility to add birthdays + repeating events to the API
All checks were successful
Jenkins Production Deployment
All checks were successful
Jenkins Production Deployment
This commit is contained in:
parent
9c45fb11ee
commit
dc65b49219
|
@ -65,6 +65,8 @@ export const hasAccess = async (calendarName: string, sessionId: string, session
|
||||||
return await checkChoirPrivileges(sessionId, sessionKey, password, ip);
|
return await checkChoirPrivileges(sessionId, sessionKey, password, ip);
|
||||||
case 'management':
|
case 'management':
|
||||||
return await checkManagementPrivileges(sessionId, sessionKey, password, ip);
|
return await checkManagementPrivileges(sessionId, sessionKey, password, ip);
|
||||||
|
case 'birthdays':
|
||||||
|
return await checkChoirPrivileges(sessionId, sessionKey, password, ip);
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,5 +108,6 @@ export interface Event {
|
||||||
lastModifiedById?: number;
|
lastModifiedById?: number;
|
||||||
url: string;
|
url: string;
|
||||||
wholeDay: boolean;
|
wholeDay: boolean;
|
||||||
|
repeatFrequency: string;
|
||||||
status?: string;
|
status?: string;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,8 @@ export const calendarNames = new Map<string, any>([
|
||||||
['public', {id: 1, name: 'Nachklang_calendar'}],
|
['public', {id: 1, name: 'Nachklang_calendar'}],
|
||||||
['members', {id: 2, name: 'Nachklang_internal_calendar'}],
|
['members', {id: 2, name: 'Nachklang_internal_calendar'}],
|
||||||
['choir', {id: 4, name: 'Nachklang_choir_calendar'}],
|
['choir', {id: 4, name: 'Nachklang_choir_calendar'}],
|
||||||
['management', {id: 3, name: 'Nachklang_management_calendar'}]
|
['management', {id: 3, name: 'Nachklang_management_calendar'}],
|
||||||
|
['birthdays', {id: 5, name: 'Nachklang_birthday_calendar'}]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
@ -557,6 +558,7 @@ eventsRouter.post('/', async (req: Request, res: Response) => {
|
||||||
createdById: user.userId ?? -1,
|
createdById: user.userId ?? -1,
|
||||||
url: req.body.url ?? '',
|
url: req.body.url ?? '',
|
||||||
wholeDay: req.body.wholeDay ?? false,
|
wholeDay: req.body.wholeDay ?? false,
|
||||||
|
repeatFrequency: req.body.repeatFrequency ?? '',
|
||||||
status: req.body.status ?? 'PUBLIC'
|
status: req.body.status ?? 'PUBLIC'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -736,6 +738,7 @@ eventsRouter.put('/:eventId', async (req: Request, res: Response) => {
|
||||||
createdById: user.userId ?? -1,
|
createdById: user.userId ?? -1,
|
||||||
url: req.body.url ?? '',
|
url: req.body.url ?? '',
|
||||||
wholeDay: req.body.wholeDay ?? false,
|
wholeDay: req.body.wholeDay ?? false,
|
||||||
|
repeatFrequency: req.body.repeatFrequency ?? '',
|
||||||
status: req.body.status ?? 'PUBLIC'
|
status: req.body.status ?? 'PUBLIC'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -913,6 +916,7 @@ eventsRouter.put('/move/:eventId', async (req: Request, res: Response) => {
|
||||||
createdById: user.userId ?? -1,
|
createdById: user.userId ?? -1,
|
||||||
url: req.body.url ?? '',
|
url: req.body.url ?? '',
|
||||||
wholeDay: req.body.wholeDay ?? false,
|
wholeDay: req.body.wholeDay ?? false,
|
||||||
|
repeatFrequency: req.body.repeatFrequency ?? '',
|
||||||
status: req.body.status ?? 'PUBLIC'
|
status: req.body.status ?? 'PUBLIC'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1044,6 +1048,7 @@ eventsRouter.delete('/:eventId', async (req: Request, res: Response) => {
|
||||||
createdById: user.userId ?? -1,
|
createdById: user.userId ?? -1,
|
||||||
url: '',
|
url: '',
|
||||||
wholeDay: false,
|
wholeDay: false,
|
||||||
|
repeatFrequency: '',
|
||||||
status: 'DELETED'
|
status: 'DELETED'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,8 @@ export const getAllEvents = async (calendarId: number): Promise<Event[]> => {
|
||||||
lastModifiedBy: row.last_modified_by_name,
|
lastModifiedBy: row.last_modified_by_name,
|
||||||
lastModifiedById: row.version_created_by_id,
|
lastModifiedById: row.version_created_by_id,
|
||||||
url: row.url,
|
url: row.url,
|
||||||
wholeDay: row.whole_day
|
wholeDay: row.whole_day,
|
||||||
|
repeatFrequency: row.repeat_frequency
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +112,7 @@ export const getAllEventsAdmin = async (calendarId: number): Promise<Event[]> =>
|
||||||
lastModifiedById: row.version_created_by_id,
|
lastModifiedById: row.version_created_by_id,
|
||||||
url: row.url,
|
url: row.url,
|
||||||
wholeDay: row.whole_day,
|
wholeDay: row.whole_day,
|
||||||
|
repeatFrequency: row.repeat_frequency,
|
||||||
status: row.status
|
status: row.status
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -135,8 +137,8 @@ export const createEvent = async (event: Event): Promise<number> => {
|
||||||
const eventsQuery = 'INSERT INTO events (calendar_id, uuid, created_by_id) VALUES (?,?,?) RETURNING event_id';
|
const eventsQuery = 'INSERT INTO events (calendar_id, uuid, created_by_id) VALUES (?,?,?) RETURNING event_id';
|
||||||
const eventsRes = await conn.execute(eventsQuery, [event.calendarId, eventUUID, event.createdById]);
|
const eventsRes = await conn.execute(eventsQuery, [event.calendarId, eventUUID, event.createdById]);
|
||||||
|
|
||||||
const versionQuery = 'INSERT INTO event_versions (event_id, name, description, start_datetime, end_datetime, whole_day, location, url, status, version_created_by_id) VALUES (?,?,?,?,?,?,?,?,?,?);'
|
const versionQuery = 'INSERT INTO event_versions (event_id, name, description, start_datetime, end_datetime, whole_day, repeat_frequency, location, url, status, version_created_by_id) VALUES (?,?,?,?,?,?,?,?,?,?,?);'
|
||||||
const versionRes = await conn.execute(versionQuery, [eventsRes[0].event_id, event.name, event.description, event.startDateTime, event.endDateTime, event.wholeDay, event.location, event.url, event.status, event.createdById]);
|
const versionRes = await conn.execute(versionQuery, [eventsRes[0].event_id, event.name, event.description, event.startDateTime, event.endDateTime, event.wholeDay, event.repeatFrequency, event.location, event.url, event.status, event.createdById]);
|
||||||
|
|
||||||
await conn.commit();
|
await conn.commit();
|
||||||
|
|
||||||
|
@ -158,8 +160,8 @@ export const createEvent = async (event: Event): Promise<number> => {
|
||||||
export const updateEvent = async (event: Event): Promise<number> => {
|
export const updateEvent = async (event: Event): Promise<number> => {
|
||||||
let conn = await NachklangCalendarDB.getConnection();
|
let conn = await NachklangCalendarDB.getConnection();
|
||||||
try {
|
try {
|
||||||
const versionQuery = 'INSERT INTO event_versions (event_id, name, description, start_datetime, end_datetime, whole_day, location, url, status, version_created_by_id) VALUES (?,?,?,?,?,?,?,?,?,?);'
|
const versionQuery = 'INSERT INTO event_versions (event_id, name, description, start_datetime, end_datetime, whole_day, repeat_frequency, location, url, status, version_created_by_id) VALUES (?,?,?,?,?,?,?,?,?,?,?);'
|
||||||
const versionRes = await conn.execute(versionQuery, [event.eventId, event.name, event.description, event.startDateTime, event.endDateTime, event.wholeDay, event.location, event.url, event.status, event.createdById]);
|
const versionRes = await conn.execute(versionQuery, [event.eventId, event.name, event.description, event.startDateTime, event.endDateTime, event.wholeDay, event.repeatFrequency, event.location, event.url, event.status, event.createdById]);
|
||||||
|
|
||||||
await conn.commit();
|
await conn.commit();
|
||||||
|
|
||||||
|
@ -274,7 +276,8 @@ export const getNextUpcomingEvent = async (calendarId: number): Promise<Event |
|
||||||
lastModifiedBy: row.last_modified_by_name,
|
lastModifiedBy: row.last_modified_by_name,
|
||||||
lastModifiedById: row.version_created_by_id,
|
lastModifiedById: row.version_created_by_id,
|
||||||
url: row.url,
|
url: row.url,
|
||||||
wholeDay: row.whole_day
|
wholeDay: row.whole_day,
|
||||||
|
repeatFrequency: row.repeat_frequency
|
||||||
} as Event;
|
} as Event;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw err;
|
throw err;
|
||||||
|
|
|
@ -53,6 +53,7 @@ const serializeIcalEvent = (icalevent: iCalEvent): string => {
|
||||||
returnString += 'DTSTART;TZID=Europe/Berlin:' + icalevent.start;
|
returnString += 'DTSTART;TZID=Europe/Berlin:' + icalevent.start;
|
||||||
returnString += 'DTEND;TZID=Europe/Berlin:' + icalevent.end;
|
returnString += 'DTEND;TZID=Europe/Berlin:' + icalevent.end;
|
||||||
}
|
}
|
||||||
|
if(!isNullOrBlank(icalevent.repeatFrequency)) returnString += 'RRULE:FREQ=' + icalevent.repeatFrequency;
|
||||||
returnString += 'SUMMARY:' + icalevent.summary;
|
returnString += 'SUMMARY:' + icalevent.summary;
|
||||||
if(!isNullOrBlank(icalevent.description)) returnString += 'DESCRIPTION:' + icalevent.description;
|
if(!isNullOrBlank(icalevent.description)) returnString += 'DESCRIPTION:' + icalevent.description;
|
||||||
if(!isNullOrBlank(icalevent.location)) returnString += 'LOCATION:' + icalevent.location;
|
if(!isNullOrBlank(icalevent.location)) returnString += 'LOCATION:' + icalevent.location;
|
||||||
|
@ -126,6 +127,7 @@ const createIcalEvent = (event: Event): iCalEvent => {
|
||||||
organizer: event.createdBy + '\n',
|
organizer: event.createdBy + '\n',
|
||||||
start: formatDate(event.startDateTime, event.wholeDay) + '\n',
|
start: formatDate(event.startDateTime, event.wholeDay) + '\n',
|
||||||
end: formatDate(event.endDateTime, event.wholeDay, true) + '\n',
|
end: formatDate(event.endDateTime, event.wholeDay, true) + '\n',
|
||||||
|
repeatFrequency: event.repeatFrequency ? event.repeatFrequency + '\n' : '',
|
||||||
summary: event.name + '\n',
|
summary: event.name + '\n',
|
||||||
description: description,
|
description: description,
|
||||||
location: location,
|
location: location,
|
||||||
|
@ -178,6 +180,7 @@ export interface iCalEvent {
|
||||||
location: string;
|
location: string;
|
||||||
url: string;
|
url: string;
|
||||||
wholeDay: boolean;
|
wholeDay: boolean;
|
||||||
|
repeatFrequency: string;
|
||||||
footer: string;
|
footer: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user