mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-14 03:43:50 +00:00
Prefeat/skip (#188)
* refactor: refactor size of event list * refactor: optimise event mutations * refactor: prepare skip feature * refactor: update tests * refactor: simplify type assertion
This commit is contained in:
@@ -9,6 +9,22 @@ import {
|
||||
} from '../models/eventsDefinition.js';
|
||||
import { generateId } from '../utils/generate_id.js';
|
||||
import { MAX_EVENTS } from '../settings.js';
|
||||
import { getPreviousPlayable } from '../utils/eventUtils.js';
|
||||
|
||||
async function _insertAndSync(newEvent) {
|
||||
if (newEvent.order) {
|
||||
const events = data.events;
|
||||
await _insertAt(newEvent, newEvent.order);
|
||||
const previousId = events?.[newEvent.order - 1]?.id;
|
||||
_insertEventInTimerAfterId(newEvent, previousId);
|
||||
} else if (newEvent.after) {
|
||||
await _insertAfterId(newEvent, newEvent.after);
|
||||
_insertEventInTimerAfterId(newEvent, newEvent.after);
|
||||
} else {
|
||||
await _insertAt(newEvent, 0);
|
||||
_insertEventInTimerAfterId(newEvent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insets an event after a given index
|
||||
@@ -83,9 +99,32 @@ function _updateTimers() {
|
||||
global.timer.updateEventList(results);
|
||||
}
|
||||
|
||||
// Updates timer object single event
|
||||
function _updateTimersSingle(id, entry) {
|
||||
global.timer.updateSingleEvent(id, entry);
|
||||
/**
|
||||
* @description Adds an event to the timer after an event with given id
|
||||
* @param {object} event
|
||||
* @param {string} [previousId]
|
||||
* @private
|
||||
*/
|
||||
function _insertEventInTimerAfterId(event, previousId) {
|
||||
if (typeof previousId === 'undefined') {
|
||||
global.timer.insertEventAtStart(event);
|
||||
} else {
|
||||
try {
|
||||
global.timer.insertEventAfterId(event, previousId);
|
||||
} catch (error) {
|
||||
global.timer.error('SERVER', `Unable to update object: ${error}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description Updates timer object single event
|
||||
* @param {string} id
|
||||
* @param {object} event
|
||||
* @private
|
||||
*/
|
||||
function _updateTimersSingle(id, event) {
|
||||
global.timer.updateSingleEvent(id, event);
|
||||
}
|
||||
|
||||
// Delete a single entry in timer object
|
||||
@@ -148,22 +187,9 @@ export const eventsPost = async (req, res) => {
|
||||
}
|
||||
|
||||
try {
|
||||
// get place where event should be
|
||||
if (newEvent.order) {
|
||||
await _insertAt(newEvent, newEvent.order);
|
||||
} else if (newEvent.after) {
|
||||
await _insertAfterId(newEvent, newEvent.after);
|
||||
} else {
|
||||
await _insertAt(newEvent, 0);
|
||||
}
|
||||
|
||||
// update timers
|
||||
_updateTimers();
|
||||
|
||||
// reply OK
|
||||
_insertAndSync(newEvent);
|
||||
res.sendStatus(201);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.status(400).send(error);
|
||||
}
|
||||
};
|
||||
@@ -183,30 +209,41 @@ export const eventsPut = async (req, res) => {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const eventIndex = data.events.findIndex((e) => e.id === eventId);
|
||||
if (eventIndex === -1) {
|
||||
res.status(400).send(`No Id found found`);
|
||||
return;
|
||||
}
|
||||
const eventIndex = data.events.findIndex((e) => e.id === eventId);
|
||||
if (eventIndex === -1) {
|
||||
res.status(400).send(`No Id found found`);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const e = data.events[eventIndex];
|
||||
data.events[eventIndex] = { ...e, ...req.body };
|
||||
data.events[eventIndex].revision++;
|
||||
await db.write();
|
||||
|
||||
// update timer
|
||||
_updateTimersSingle(eventId, req.body);
|
||||
|
||||
if (data.events[eventIndex].skip) {
|
||||
_deleteTimerId(eventId);
|
||||
// if it is a skip, i make sure it is deleted from timer
|
||||
// event id might already not exist
|
||||
} else {
|
||||
try {
|
||||
_updateTimersSingle(eventId, req.body);
|
||||
} catch (error) {
|
||||
if (error === 'Event not found') {
|
||||
const { id: previousId } = getPreviousPlayable(data.events, e.id);
|
||||
_insertEventInTimerAfterId(data.events[eventIndex], previousId);
|
||||
}
|
||||
}
|
||||
}
|
||||
res.sendStatus(200);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.status(400).send(error);
|
||||
}
|
||||
};
|
||||
|
||||
// Create controller for PATCH request to '/events/'
|
||||
// Returns -
|
||||
// DEPRECATED
|
||||
export const eventsPatch = async (req, res) => {
|
||||
// Code is the same as put, call that
|
||||
await eventsPut(req, res);
|
||||
@@ -247,7 +284,6 @@ export const eventsReorder = async (req, res) => {
|
||||
|
||||
res.sendStatus(200);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.status(400).send(error);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user