This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Zaimki/server/routes/calendar.js

76 lines
2.1 KiB
JavaScript

import { Router } from 'express';
import {handleErrorAsync} from "../../src/helpers";
import { createEvents } from 'ics';
import { calendar } from '../../src/calendar/calendar';
import {loadSuml} from "../loader";
import { clearLinkedText } from '../../src/helpers';
// TODO caching? // import { caches } from "../../src/cache";
const translations = loadSuml('translations');
const renderEvents = (yearEvents, res) => {
const events = [];
let i = 1;
for (let year in yearEvents) {
if (!yearEvents.hasOwnProperty(year)) { continue; }
for (let event of yearEvents[year]) {
if (!event) { continue; }
const ics = event.toIcs(year, translations, clearLinkedText, i);
if (ics !== null) {
events.push(ics);
}
}
i++;
}
if (events.length === 0) {
return res.status(404).json({error: 'Not found'});
}
createEvents(
events,
(error, value) => {
if (error) {
console.error(error);
return res.status(500).json({error: 'Unexpected server error'});
}
res.header('Content-type', 'text/calendar');
res.send(value);
}
);
}
const router = Router();
const routeBase = `/queer-calendar-${global.config.locale}`;
router.get(routeBase + '.ics', handleErrorAsync(async (req, res) => {
let events = {};
for (let year of calendar.getAllYears()) {
events[year.year] = year.events;
}
renderEvents(events, res);
}));
router.get(routeBase + '-:year-:uuid.ics', handleErrorAsync(async (req, res) => {
const year = calendar.getYear(req.params.year);
if (!year) {
return res.status(404).json({error: 'Not found'});
}
renderEvents({[year.year]: [year.eventsByUuid[req.params.uuid]]}, res)
}));
router.get(routeBase + '-:year.ics', handleErrorAsync(async (req, res) => {
const year = calendar.getYear(req.params.year);
if (!year) {
return res.status(404).json({error: 'Not found'});
}
renderEvents({[year.year]: year.events}, res)
}));
export default router;