dont save

This commit is contained in:
arc-alex
2023-12-16 23:56:15 +01:00
parent 2464ac1bd9
commit 8fa7392698
11 changed files with 18 additions and 125 deletions
@@ -11,7 +11,6 @@ import {
UserFields, UserFields,
Alias, Alias,
Settings, Settings,
Sheet,
} from 'ontime-types'; } from 'ontime-types';
import { data, db } from '../../modules/loadDb.js'; import { data, db } from '../../modules/loadDb.js';
@@ -59,15 +58,6 @@ export class DataProvider {
await this.persist(); await this.persist();
} }
static getSheet() {
return data.sheet;
}
static async setSheet(newData: Sheet) {
data.sheet = { ...newData };
await this.persist();
}
static getOsc() { static getOsc() {
return data.osc; return data.osc;
} }
@@ -6,13 +6,12 @@ import { DatabaseModel } from 'ontime-types';
* @param {object} newData * @param {object} newData
*/ */
export function safeMerge(existing: DatabaseModel, newData: Partial<DatabaseModel>) { export function safeMerge(existing: DatabaseModel, newData: Partial<DatabaseModel>) {
const { rundown, project, settings, sheet, viewSettings, osc, aliases, userFields } = newData || {}; const { rundown, project, settings, viewSettings, osc, aliases, userFields } = newData || {};
return { return {
...existing, ...existing,
rundown: rundown ?? existing.rundown, rundown: rundown ?? existing.rundown,
project: { ...existing.project, ...project }, project: { ...existing.project, ...project },
settings: { ...existing.settings, ...settings }, settings: { ...existing.settings, ...settings },
sheet: { ...existing.sheet, ...sheet },
viewSettings: { ...existing.viewSettings, ...viewSettings }, viewSettings: { ...existing.viewSettings, ...viewSettings },
aliases: aliases ?? existing.aliases, aliases: aliases ?? existing.aliases,
userFields: { userFields: {
@@ -1,4 +1,4 @@
import { Alias, DatabaseModel, Sheet, OntimeRundown, Settings } from 'ontime-types'; import { Alias, DatabaseModel, OntimeRundown, Settings } from 'ontime-types';
import { safeMerge } from '../DataProvider.utils.js'; import { safeMerge } from '../DataProvider.utils.js';
describe('safeMerge', () => { describe('safeMerge', () => {
@@ -21,10 +21,6 @@ describe('safeMerge', () => {
timeFormat: '24', timeFormat: '24',
language: 'en', language: 'en',
}, },
sheet: {
worksheet: '1',
id: '2',
},
viewSettings: { viewSettings: {
overrideStyles: false, overrideStyles: false,
endMessage: 'existing endMessage', endMessage: 'existing endMessage',
@@ -101,21 +97,6 @@ describe('safeMerge', () => {
language: 'pt', language: 'pt',
}); });
}); });
it('merges the sheet key', () => {
const newData = {
sheet: {
id: '4',
worksheet: '5',
} as Sheet,
};
const mergedData = safeMerge(existing, newData);
expect(mergedData.sheet).toEqual({
id: '4',
worksheet: '5',
});
});
it('merges the osc key', () => { it('merges the osc key', () => {
const newData = { const newData = {
osc: { osc: {
@@ -464,7 +464,8 @@ export const postNew: RequestHandler = async (req, res) => {
*/ */
export async function previewSheet(req, res) { export async function previewSheet(req, res) {
try { try {
const data = await Sheet.pull(); const { id, worksheet } = req.data;
const data = await Sheet.pull(id, worksheet);
res.status(200).send(data); res.status(200).send(data);
} catch (error) { } catch (error) {
res.status(500).send({ message: error.toString() }); res.status(500).send({ message: error.toString() });
@@ -474,10 +475,12 @@ export async function previewSheet(req, res) {
/** /**
* downloads and parses an sheet * downloads and parses an sheet
* @returns parsed result * @returns parsed result
* @method POST
*/ */
export async function pushSheet(req, res) { export async function pushSheet(req, res) {
try { try {
await Sheet.push(); const { id, worksheet } = req.data;
await Sheet.push(id, worksheet);
res.status(200).send('ok'); res.status(200).send('ok');
} catch (error) { } catch (error) {
res.status(500).send({ message: error.toString() }); res.status(500).send({ message: error.toString() });
@@ -487,6 +490,7 @@ export async function pushSheet(req, res) {
/** /**
* uploads Client secrets file * uploads Client secrets file
* @returns parsed result * @returns parsed result
* @method POST
*/ */
export async function uploadSheetClientFile(req, res) { export async function uploadSheetClientFile(req, res) {
if (!req.file.path) { if (!req.file.path) {
@@ -519,40 +523,11 @@ export async function sheetAuthUrl(req, res) {
} }
} }
/**
* @description Get s sheet Settings
* @method GET
*/
export const getSheetSettings = async (req, res) => {
const sheet = await DataProvider.getSheet();
res.status(200).send(sheet);
};
/**
* @description Change view Settings
* @method POST
*/
export const postSheetSettings = async (req, res) => {
if (failEmptyObjects(req.body, res)) {
return;
}
try {
const newData = {
id: req.body.id,
worksheet: req.body.worksheet,
};
await DataProvider.setSheet(newData);
res.status(200).send(newData);
} catch (error) {
res.status(400).send({ message: error.toString() });
}
};
/** /**
* @description Get sheet state * @description Get sheet state
* @method GET * @method GET
*/ */
export const getSheetState = async (req, res) => { export const getSheetState = async (req, res) => {
res.status(200).send(await Sheet.getSheetState()); const { id, worksheet } = req.data;
res.status(200).send(await Sheet.getSheetState(id, worksheet));
}; };
@@ -164,13 +164,3 @@ export const validateSheetPreview = [
next(); next();
}, },
]; ];
export const validateSheetSettings = [
body('id').isString().optional({ nullable: false }),
body('worksheet').isString().optional({ nullable: false }),
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) return res.status(422).json({ errors: errors.array() });
next();
},
];
-4
View File
@@ -20,10 +20,6 @@ export const dbModel: DatabaseModel = {
timeFormat: '24', timeFormat: '24',
language: 'en', language: 'en',
}, },
sheet: {
id: '',
worksheet: '',
},
viewSettings: { viewSettings: {
overrideStyles: false, overrideStyles: false,
normalColor: '#ffffffcc', normalColor: '#ffffffcc',
-9
View File
@@ -25,14 +25,11 @@ import {
uploadSheetClientFile, uploadSheetClientFile,
previewSheet, previewSheet,
pushSheet, pushSheet,
getSheetSettings,
postSheetSettings,
getSheetState, getSheetState,
} from '../controllers/ontimeController.js'; } from '../controllers/ontimeController.js';
import { import {
validateAliases, validateAliases,
validateSheetSettings,
validateOSC, validateOSC,
validatePatchProjectFile, validatePatchProjectFile,
validateSettings, validateSettings,
@@ -118,11 +115,5 @@ router.post('/sheet-preview', validateSheetPreview, previewSheet);
// create route between controller and '/ontime/preview-sheet' endpoint // create route between controller and '/ontime/preview-sheet' endpoint
router.post('/sheet-push', pushSheet); router.post('/sheet-push', pushSheet);
// create route between controller and '/ontime/sheet-settings' endpoint
router.get('/sheet-settings', getSheetSettings);
// create route between controller and '/ontime/sheet-settings' endpoint
router.post('/sheet-settings', validateSheetSettings, postSheetSettings);
// create route between controller and '/ontime/sheet-state' endpoint // create route between controller and '/ontime/sheet-state' endpoint
router.get('/sheet-state', getSheetState); router.get('/sheet-state', getSheetState);
-3
View File
@@ -34,7 +34,6 @@ import {
parseSettings, parseSettings,
parseUserFields, parseUserFields,
parseViewSettings, parseViewSettings,
parseSheet,
} from './parserFunctions.js'; } from './parserFunctions.js';
import { parseExcelDate } from './time.js'; import { parseExcelDate } from './time.js';
import { coerceBoolean } from './coerceType.js'; import { coerceBoolean } from './coerceType.js';
@@ -371,8 +370,6 @@ export const parseJson = async (jsonData): Promise<DatabaseModel | null> => {
returnData.osc = parseOsc(jsonData) ?? dbModel.osc; returnData.osc = parseOsc(jsonData) ?? dbModel.osc;
// Import HTTP settings if any // Import HTTP settings if any
returnData.http = parseHttp(jsonData) ?? dbModel.http; returnData.http = parseHttp(jsonData) ?? dbModel.http;
// Import Sheet settings if any
returnData.sheet = parseSheet(jsonData, true);
return returnData as DatabaseModel; return returnData as DatabaseModel;
}; };
+1 -23
View File
@@ -1,7 +1,6 @@
import { generateId } from 'ontime-utils'; import { generateId } from 'ontime-utils';
import { import {
Alias, Alias,
Sheet,
OntimeRundown, OntimeRundown,
HttpSettings, HttpSettings,
OSCSettings, OSCSettings,
@@ -332,25 +331,4 @@ export const parseUserFields = (data): UserFields => {
} }
} }
return { ...newUserFields }; return { ...newUserFields };
}; };
/**
* Parse Sheet portion of an entry
* @param {object} data - data object
* @param {boolean} enforce - whether to create a definition if one is missing
* @returns {object} - event object data
*/
export const parseSheet = (data, enforce) => {
const newSheet: Sheet = {
id: '',
worksheet: '',
};
if ('sheet' in data) {
console.log('Found Sheet definition, importing...');
newSheet.id ??= data.sheet?.id;
newSheet.worksheet ??= data.sheet?.worksheet;
return newSheet;
} else if (enforce) {
return newSheet;
}
};
+6 -9
View File
@@ -41,7 +41,7 @@ class sheet {
} }
} }
public async getSheetState(): Promise<SheetState> { public async getSheetState(id: string, worksheet: string): Promise<SheetState> {
const ret: SheetState = { const ret: SheetState = {
secret: false, secret: false,
auth: false, auth: false,
@@ -65,11 +65,10 @@ class sheet {
if (!ret.auth) { if (!ret.auth) {
return ret; return ret;
} }
const settings = DataProvider.getSheet(); if (id != '') {
if (settings.id != '') {
const spreadsheets = await sheets({ version: 'v4', auth: sheet.client }) const spreadsheets = await sheets({ version: 'v4', auth: sheet.client })
.spreadsheets.get({ .spreadsheets.get({
spreadsheetId: settings.id, spreadsheetId: id,
includeGridData: false, includeGridData: false,
}) })
.catch((err) => { .catch((err) => {
@@ -80,7 +79,7 @@ class sheet {
} }
ret.id = true; ret.id = true;
ret.worksheetOptions = spreadsheets.data.sheets.map((i) => i.properties.title); ret.worksheetOptions = spreadsheets.data.sheets.map((i) => i.properties.title);
if (ret.worksheetOptions.indexOf(settings.worksheet) < 0) { if (ret.worksheetOptions.indexOf(worksheet) < 0) {
return ret; return ret;
} }
ret.worksheet = true; ret.worksheet = true;
@@ -118,8 +117,7 @@ class sheet {
* push sheet * push sheet
* @throws * @throws
*/ */
public async push() { public async push(id: string, worksheet: string) {
const { id, worksheet } = DataProvider.getSheet();
const { worksheetId, range } = await this.exist(id, worksheet); const { worksheetId, range } = await this.exist(id, worksheet);
const rq = await sheets({ version: 'v4', auth: sheet.client }).spreadsheets.values.get({ const rq = await sheets({ version: 'v4', auth: sheet.client }).spreadsheets.values.get({
@@ -197,8 +195,7 @@ class sheet {
* @returns {Promise<Partial<ResponseOK>>} * @returns {Promise<Partial<ResponseOK>>}
* @throws * @throws
*/ */
public async pull(): Promise<Partial<ResponseOK>> { public async pull(id: string, worksheet: string): Promise<Partial<ResponseOK>> {
const { id, worksheet } = DataProvider.getSheet();
const { range } = await this.exist(id, worksheet); const { range } = await this.exist(id, worksheet);
const res: Partial<ResponseOK> = {}; const res: Partial<ResponseOK> = {};
@@ -5,7 +5,7 @@ import { OSCSettings } from './core/OscSettings.type.js';
import { Settings } from './core/Settings.type.js'; import { Settings } from './core/Settings.type.js';
import { UserFields } from './core/UserFields.type.js'; import { UserFields } from './core/UserFields.type.js';
import { ViewSettings } from './core/Views.type.js'; import { ViewSettings } from './core/Views.type.js';
import { Sheet, HttpSettings } from '../index.js'; import { HttpSettings } from '../index.js';
export type DatabaseModel = { export type DatabaseModel = {
rundown: OntimeRundown; rundown: OntimeRundown;
@@ -14,7 +14,6 @@ export type DatabaseModel = {
viewSettings: ViewSettings; viewSettings: ViewSettings;
aliases: Alias[]; aliases: Alias[];
userFields: UserFields; userFields: UserFields;
sheet: Sheet;
osc: OSCSettings; osc: OSCSettings;
http: HttpSettings; http: HttpSettings;
}; };