diff --git a/apps/server/src/controllers/ontimeController.ts b/apps/server/src/controllers/ontimeController.ts index 01fe9c1f2..bbed2df71 100644 --- a/apps/server/src/controllers/ontimeController.ts +++ b/apps/server/src/controllers/ontimeController.ts @@ -159,16 +159,16 @@ export const getInfo = async (_req: Request, res: Response) => { }); }; -// Create controller for POST request to '/ontime/aliases' +// Create controller for POST request to '/ontime/presets' // Returns - -export const getAliases = async (_req: Request, res: Response) => { +export const getPresets = async (_req: Request, res: Response) => { const aliases = DataProvider.getAliases(); res.status(200).send(aliases); }; -// Create controller for POST request to '/ontime/aliases' +// Create controller for POST request to '/ontime/presets' // Returns ACK message -export const postAlias = async (req: Request, res: Response) => { +export const postPreset = async (req: Request, res: Response) => { try { const newAlias = { enabled: req.body.enabled, @@ -183,9 +183,9 @@ export const postAlias = async (req: Request, res: Response) => { } }; -// Update controller for PUT request to '/ontime/aliases' +// Update controller for PUT request to '/ontime/presets/:preset' // Returns ACK message -export const updateAliases = async (req: Request, res: Response) => { +export const updatePreset = async (req: Request, res: Response) => { try { const { alias, enabled, pathAndParams } = req.body; @@ -211,9 +211,9 @@ export const updateAliases = async (req: Request, res: Response) => { } }; -// Delete controller for DELETE request to '/ontime/aliases/:alias' +// Delete controller for DELETE request to '/ontime/presets/:preset' // Returns ACK message -export const deleteAlias = async (req: Request, res: Response) => { +export const deletePreset = async (req: Request, res: Response) => { try { const alias = req.params.alias; diff --git a/apps/server/src/controllers/ontimeController.validate.ts b/apps/server/src/controllers/ontimeController.validate.ts index 45a1c9e38..6aa111bc7 100644 --- a/apps/server/src/controllers/ontimeController.validate.ts +++ b/apps/server/src/controllers/ontimeController.validate.ts @@ -24,9 +24,9 @@ export const viewValidator = [ ]; /** - * @description Validates object for POST /ontime/aliases + * @description Validates object for POST /ontime/presets */ -export const validateAliases = [ +export const validatePresets = [ body().isArray(), body('*.enabled').isBoolean(), body('*.alias').isString().trim(), @@ -40,9 +40,9 @@ export const validateAliases = [ ]; /** - * @description Validates object for POST /ontime/aliases + * @description Validates object for POST /ontime/presets */ -export const validateCreateAlias = [ +export const validateCreatePreset = [ body('alias').isString().trim(), body('pathAndParams').isString().trim(), body('enabled').isBoolean(), @@ -55,9 +55,9 @@ export const validateCreateAlias = [ ]; /** - * @description Validates object for PUT /ontime/aliases + * @description Validates object for PUT /ontime/presets */ -export const validateUpdateAlises = [ +export const validateUpdatePreset = [ body('alias').isString().trim(), body('pathAndParams').isString().trim().optional(), body('enabled').isBoolean().optional(), @@ -151,7 +151,7 @@ export const validatePatchProjectFile = [ body('project').isObject().optional({ nullable: false }), body('settings').isObject().optional({ nullable: false }), body('viewSettings').isObject().optional({ nullable: false }), - body('aliases').isArray().optional({ nullable: false }), + body('aliases').isArray().optional({ nullable: false }), // TODO body('userFields').isObject().optional({ nullable: false }), body('osc').isObject().optional({ nullable: false }), diff --git a/apps/server/src/routes/ontimeRouter.ts b/apps/server/src/routes/ontimeRouter.ts index a76197e7d..e25b2ea6f 100644 --- a/apps/server/src/routes/ontimeRouter.ts +++ b/apps/server/src/routes/ontimeRouter.ts @@ -3,7 +3,6 @@ import { uploadFile } from '../utils/upload.js'; import { dbDownload, dbUpload, - getAliases, getInfo, getOSC, getHTTP, @@ -31,9 +30,10 @@ import { postId, getAuthentication, getClientSecrect as getClientSecret, - updateAliases, - deleteAlias, - postAlias, + postPreset, + updatePreset, + deletePreset, + getPresets, } from '../controllers/ontimeController.js'; import { @@ -49,8 +49,8 @@ import { validateSheetid, validateWorksheet, validateSheetOptions, - validateUpdateAlises, - validateCreateAlias, + validateCreatePreset, + validateUpdatePreset, } from '../controllers/ontimeController.validate.js'; import { projectSanitiser } from '../controllers/projectController.validate.js'; import { sanitizeProjectFilename } from '../utils/sanitizeProjectFilename.js'; @@ -85,16 +85,16 @@ router.get('/views', getViewSettings); router.post('/views', viewValidator, postViewSettings); // create route between controller and '/ontime/aliases' endpoint -router.get('/aliases', getAliases); +router.get('/presets', getPresets); // create route between controller and '/ontime/aliases' endpoint -router.post('/aliases', validateCreateAlias, postAlias); +router.post('/presets', validateCreatePreset, postPreset); // create route between controller and /ontime/aliases' endpoint -router.put('/aliases', validateUpdateAlises, updateAliases); +router.put('/presets', validateUpdatePreset, updatePreset); // create route between controller and '/ontime/aliases' endpoint -router.delete('/aliases/:alias', deleteAlias); +router.delete('/presets/:preset', deletePreset); // create route between controller and '/ontime/aliases' endpoint router.get('/userfields', getUserFields); diff --git a/apps/server/src/utils/parser.ts b/apps/server/src/utils/parser.ts index 20ba3f86d..730a1350b 100644 --- a/apps/server/src/utils/parser.ts +++ b/apps/server/src/utils/parser.ts @@ -37,6 +37,7 @@ import { parseSettings, parseUserFields, parseViewSettings, + parsePresets, } from './parserFunctions.js'; import { parseExcelDate } from './time.js'; import { configService } from '../services/ConfigService.js'; @@ -329,6 +330,7 @@ export const parseJson = async (jsonData: Partial): Promise { return newAliases; }; +/** + * Parse presets portion of an entry + * @param {object} data - data object + * @returns {object} - event object data + */ +export const parsePresets = (data): Presets => { + const newPresets: { [key: string]: { alias: string; pathAndParams: string; enabled: boolean } } = {}; + if ('presets' in data) { + console.log('Found Presets definition, importing...'); + try { + for (const preset in data.presets) { + const newPreset = { + alias: data.presets[preset].alias, + pathAndParams: data.presets[preset].pathAndParams, + enabled: data.presets[preset].enabled, + }; + newPresets[preset] = newPreset; + } + console.log(`Uploaded ${Object.keys(newPresets).length} preset(s)`); + } catch (error) { + console.log(`Error: ${error}`); + } + } + return newPresets; +}; + /** * Parse userFields entry * @param {object} data - data object diff --git a/apps/server/test-db/db.json b/apps/server/test-db/db.json index 7daca5e61..dd9a89055 100644 --- a/apps/server/test-db/db.json +++ b/apps/server/test-db/db.json @@ -436,6 +436,13 @@ "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" } ], + "presets": { + "test": { + "enabled": true, + "preset": "test", + "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" + } + }, "userFields": { "user0": "user0", "user1": "user1", diff --git a/demo-db/db.json b/demo-db/db.json index 01ff47a36..bd87fecac 100644 --- a/demo-db/db.json +++ b/demo-db/db.json @@ -436,6 +436,13 @@ "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" } ], + "presets": { + "test": { + "enabled": true, + "preset": "test", + "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" + } + }, "userFields": { "user0": "user0", "user1": "user1", diff --git a/e2e/tests/fixtures/test-db.json b/e2e/tests/fixtures/test-db.json index 01ff47a36..bd87fecac 100644 --- a/e2e/tests/fixtures/test-db.json +++ b/e2e/tests/fixtures/test-db.json @@ -436,6 +436,13 @@ "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" } ], + "presets": { + "test": { + "enabled": true, + "preset": "test", + "pathAndParams": "lower?bg=ff2&text=f00&size=0.6&transition=5" + } + }, "userFields": { "user0": "user0", "user1": "user1", diff --git a/packages/types/src/definitions/DataModel.type.ts b/packages/types/src/definitions/DataModel.type.ts index b72509771..a6fd8687a 100644 --- a/packages/types/src/definitions/DataModel.type.ts +++ b/packages/types/src/definitions/DataModel.type.ts @@ -6,6 +6,7 @@ import { Settings } from './core/Settings.type.js'; import { UserFields } from './core/UserFields.type.js'; import { ViewSettings } from './core/Views.type.js'; import { HttpSettings } from '../index.js'; +import { Presets } from './core/Presets.type.js'; export type DatabaseModel = { rundown: OntimeRundown; @@ -13,6 +14,7 @@ export type DatabaseModel = { settings: Settings; viewSettings: ViewSettings; aliases: Alias[]; + presets: Presets; userFields: UserFields; osc: OSCSettings; http: HttpSettings; diff --git a/packages/types/src/definitions/core/Presets.type.ts b/packages/types/src/definitions/core/Presets.type.ts new file mode 100644 index 000000000..165f1a67f --- /dev/null +++ b/packages/types/src/definitions/core/Presets.type.ts @@ -0,0 +1,7 @@ +export type Presets = { + [key: string]: { + alias: string; + pathAndParams: string; + enabled: boolean; + }; +}; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 60731fddf..01116a37e 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -27,6 +27,9 @@ export type { TimeFormat } from './definitions/core/TimeFormat.type.js'; // ---> Aliases export type { Alias } from './definitions/core/Alias.type.js'; +// ---> Presets +export type { Presets } from './definitions/core/Presets.type.js'; + // ---> User Fields export type { UserFields } from './definitions/core/UserFields.type.js';