agenda-paper
Version:
Show your daily agenda on an ePaper display
64 lines (49 loc) • 1.66 kB
text/typescript
import { NextFunction, Request, Response } from 'express';
import { APRequest } from '../requests-types';
import { CONFIG_FOLDER } from '../constants';
import { doesFileExist, readJsonFile, writeJsonToFile } from '../helpers/file.helper';
export interface Settings {
showLocation?: boolean;
showFreeEvents?: boolean;
maskPrivateEvents?: boolean;
}
const SETTINGS_FILE_NAME = `${CONFIG_FOLDER}/settings.json`;
const INITIAL_SETTINGS: Settings = {
showLocation: false,
showFreeEvents: false,
maskPrivateEvents: true,
};
export const loadSettingsFromFile = () => async (req: Request, res: Response, next: NextFunction) => {
const { payload } = <APRequest>req;
let settings;
if (doesFileExist(SETTINGS_FILE_NAME)) {
settings = readJsonFile(SETTINGS_FILE_NAME);
} else {
settings = INITIAL_SETTINGS;
writeJsonToFile(SETTINGS_FILE_NAME, settings);
}
payload.settings = settings;
next();
};
export const extractSettingsFromBody = () => async (req: Request, res: Response, next: NextFunction) => {
const { body, payload } = <APRequest>req;
const { showLocation, showFreeEvents, maskPrivateEvents } = <Settings>body;
const settings: Settings = {
showLocation,
showFreeEvents,
maskPrivateEvents,
};
payload.settings = settings;
next();
};
export const saveSettingsToFile = () => async (req: Request, res: Response, next: NextFunction) => {
const { payload } = <APRequest>req;
const { settings } = <{ settings: Settings }>payload;
try {
writeJsonToFile(SETTINGS_FILE_NAME, settings);
} catch (e) {
console.error(e);
return res.status(500).send();
}
return next();
};