refactor: rundown (#597)

* refactor: add revision number to rundown

* chore: migrate query
This commit is contained in:
Carlos Valente
2023-11-17 16:18:02 +01:00
committed by GitHub
parent 58239af8bb
commit 884ab0b67b
22 changed files with 225 additions and 145 deletions
@@ -1,3 +1,7 @@
import { GetRundownCached } from 'ontime-types';
import { Request, Response, RequestHandler } from 'express';
import { failEmptyObjects } from '../utils/routerUtils.js';
import {
addEvent,
@@ -8,8 +12,7 @@ import {
reorderEvent,
swapEvents,
} from '../services/rundown-service/RundownService.js';
import { getDelayedRundown } from '../services/rundown-service/delayedRundown.utils.js';
import { RequestHandler } from 'express';
import { getDelayedRundown, getRundownCache } from '../services/rundown-service/delayedRundown.utils.js';
// Create controller for GET request to '/events'
// Returns -
@@ -18,6 +21,13 @@ export const rundownGetAll: RequestHandler = async (_req, res) => {
res.json(delayedRundown);
};
// Create controller for GET request to '/events/cached'
// Returns -
export const rundownGetCached: RequestHandler = async (_req: Request, res: Response<GetRundownCached>) => {
const cachedRundown = getRundownCache();
res.json(cachedRundown);
};
// Create controller for POST request to '/events/'
// Returns -
export const rundownPost: RequestHandler = async (req, res) => {
+4
View File
@@ -4,6 +4,7 @@ import {
rundownApplyDelay,
rundownDelete,
rundownGetAll,
rundownGetCached,
rundownPost,
rundownPut,
rundownReorder,
@@ -19,6 +20,9 @@ import {
export const router = express.Router();
// create route between controller and '/events/cached' endpoint
router.get('/cached', rundownGetCached);
// create route between controller and '/events/' endpoint
router.get('/', rundownGetAll);
@@ -1,4 +1,5 @@
import {
GetRundownCached,
isOntimeBlock,
isOntimeDelay,
isOntimeEvent,
@@ -16,6 +17,11 @@ import { isProduction } from '../../setup.js';
import { deleteAtIndex, insertAtIndex, reorderArray } from '../../utils/arrayUtils.js';
import { _applyDelay } from '../delayUtils.js';
/**
* Keep incremental revision number of rundown for runtime
*/
let rundownRevision = 0;
/**
* Key of rundown in cache
*/
@@ -38,7 +44,25 @@ export function invalidateFromError(errorMessage = 'Found mismatch between store
* Returns rundown with calculated delays
* Ensures request goes through the caching layer
*/
export function getDelayedRundown(): OntimeRundown {
export function getRundownCache(): GetRundownCached {
function calculateRundown() {
const rundown = DataProvider.getRundown();
return calculateRuntimeDelays(rundown);
}
const cached = getCached(delayedRundownCacheKey, calculateRundown);
return {
rundown: cached,
revision: rundownRevision,
};
}
/**
* Returns rundown with calculated delays
* Ensures request goes through the caching layer
*/
export function getDelayedRundown() {
function calculateRundown() {
const rundown = DataProvider.getRundown();
return calculateRuntimeDelays(rundown);
@@ -72,6 +96,8 @@ export async function cachedAdd(eventIndex: number, event: OntimeEvent | OntimeD
runtimeCacheStore.setCached(delayedRundownCacheKey, newDelayedRundown);
// we need to delay updating this to ensure add operation happens on same dataset
await DataProvider.setRundown(newRundown);
rundownRevision++;
}
/**
@@ -113,6 +139,8 @@ export async function cachedEdit(
// we need to delay updating this to ensure edit operation happens on same dataset
await DataProvider.setRundown(updatedRundown);
rundownRevision++;
return newEvent;
}
@@ -147,6 +175,8 @@ export async function cachedDelete(eventId: string) {
}
// we need to delay updating this to ensure edit operation happens on same dataset
await DataProvider.setRundown(updatedRundown);
rundownRevision++;
}
/**
@@ -178,12 +208,15 @@ export async function cachedReorder(eventId: string, from: number, to: number) {
// we need to delay updating this to ensure edit operation happens on same dataset
await DataProvider.setRundown(updatedRundown);
rundownRevision++;
return reorderedEvent;
}
export async function cachedClear() {
await DataProvider.clearRundown();
runtimeCacheStore.setCached(delayedRundownCacheKey, []);
rundownRevision++;
}
/**
@@ -211,6 +244,8 @@ export async function cachedSwap(fromEventId: string, toEventId: string) {
}
await DataProvider.setRundown(rundownToUpdate);
rundownRevision++;
}
export async function cachedApplyDelay(eventId: string) {
@@ -224,6 +259,8 @@ export async function cachedApplyDelay(eventId: string) {
// update
runtimeCacheStore.setCached(delayedRundownCacheKey, cachedRundown);
await DataProvider.setRundown(persistedRundown);
rundownRevision++;
}
/**