diff --git a/apps/client/src/common/api/db.ts b/apps/client/src/common/api/db.ts index 8acc42883..f402a3be7 100644 --- a/apps/client/src/common/api/db.ts +++ b/apps/client/src/common/api/db.ts @@ -1,5 +1,5 @@ import axios, { AxiosResponse } from 'axios'; -import { DatabaseModel, GetInfo, MessageResponse, ProjectData, ProjectFileListResponse } from 'ontime-types'; +import { DatabaseModel, MessageResponse, ProjectData, ProjectFileListResponse } from 'ontime-types'; import { makeCSV, makeTable } from '../../features/cuesheet/cuesheetUtils'; @@ -138,14 +138,6 @@ export async function deleteProject(filename: string): Promise return res.data; } -/** - * HTTP request to retrieve application info - */ -export async function getInfo(): Promise { - const res = await axios.get(`${dbPath}/info`); - return res.data; -} - /** * Utility function gets project from db * @param fileName diff --git a/apps/client/src/common/api/session.ts b/apps/client/src/common/api/session.ts new file mode 100644 index 000000000..898bc50b8 --- /dev/null +++ b/apps/client/src/common/api/session.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; +import { GetInfo } from 'ontime-types'; + +import { apiEntryUrl } from './constants'; + +const sessionPath = `${apiEntryUrl}/session`; + +/** + * HTTP request to retrieve application info + */ +export async function getInfo(): Promise { + const res = await axios.get(`${sessionPath}/info`); + return res.data; +} diff --git a/apps/client/src/common/hooks-query/useInfo.ts b/apps/client/src/common/hooks-query/useInfo.ts index a05ba0c22..1f295fc7a 100644 --- a/apps/client/src/common/hooks-query/useInfo.ts +++ b/apps/client/src/common/hooks-query/useInfo.ts @@ -3,7 +3,7 @@ import { GetInfo } from 'ontime-types'; import { queryRefetchIntervalSlow } from '../../ontimeConfig'; import { APP_INFO } from '../api/constants'; -import { getInfo } from '../api/db'; +import { getInfo } from '../api/session'; import { ontimePlaceholderInfo } from '../models/Info'; export default function useInfo() { diff --git a/apps/server/src/api-data/db/db.controller.ts b/apps/server/src/api-data/db/db.controller.ts index e49d88358..c58ebad01 100644 --- a/apps/server/src/api-data/db/db.controller.ts +++ b/apps/server/src/api-data/db/db.controller.ts @@ -1,11 +1,4 @@ -import { - DatabaseModel, - ErrorResponse, - GetInfo, - MessageResponse, - ProjectData, - ProjectFileListResponse, -} from 'ontime-types'; +import { DatabaseModel, ErrorResponse, MessageResponse, ProjectData, ProjectFileListResponse } from 'ontime-types'; import { getErrorMessage } from 'ontime-utils'; import type { Request, Response } from 'express'; @@ -241,13 +234,3 @@ export async function deleteProjectFile(req: Request, res: Response) { - try { - const info = await projectService.getInfo(); - res.status(200).send(info); - } catch (error) { - const message = getErrorMessage(error); - res.status(500).send({ message }); - } -} diff --git a/apps/server/src/api-data/db/db.router.ts b/apps/server/src/api-data/db/db.router.ts index 55d95300a..6d6719a62 100644 --- a/apps/server/src/api-data/db/db.router.ts +++ b/apps/server/src/api-data/db/db.router.ts @@ -5,7 +5,6 @@ import { currentProjectDownload, deleteProjectFile, duplicateProjectFile, - getInfo, listProjects, loadProject, patchPartialProjectFile, @@ -37,5 +36,3 @@ router.post('/load', validateFilenameBody, loadProject); router.post('/:filename/duplicate', validateFilenameParam, validateNewFilenameBody, duplicateProjectFile); router.put('/:filename/rename', validateFilenameParam, validateNewFilenameBody, renameProjectFile); router.delete('/:filename', validateFilenameParam, deleteProjectFile); - -router.get('/info', getInfo); diff --git a/apps/server/src/api-data/index.ts b/apps/server/src/api-data/index.ts index 59a54fd9b..bb9417e04 100644 --- a/apps/server/src/api-data/index.ts +++ b/apps/server/src/api-data/index.ts @@ -10,6 +10,7 @@ import { router as rundownRouter } from './rundown/rundown.router.js'; import { router as settingsRouter } from './settings/settings.router.js'; import { router as sheetsRouter } from './sheets/sheets.router.js'; import { router as excelRouter } from './excel/excel.router.js'; +import { router as sessionRouter } from './session/session.router.js'; import { router as viewSettingsRouter } from './view-settings/viewSettings.router.js'; export const appRouter = express.Router(); @@ -24,6 +25,7 @@ appRouter.use('/settings', settingsRouter); appRouter.use('/sheets', sheetsRouter); appRouter.use('/excel', excelRouter); appRouter.use('/url-presets', urlPresetsRouter); +appRouter.use('/session', sessionRouter); appRouter.use('/view-settings', viewSettingsRouter); //we don't want to redirect to react index when using api routes diff --git a/apps/server/src/api-data/session/session.controller.ts b/apps/server/src/api-data/session/session.controller.ts new file mode 100644 index 000000000..851c4d83a --- /dev/null +++ b/apps/server/src/api-data/session/session.controller.ts @@ -0,0 +1,16 @@ +import { getErrorMessage } from 'ontime-utils'; +import { ErrorResponse, GetInfo } from 'ontime-types'; + +import type { Request, Response } from 'express'; + +import * as sessionService from './session.service.js'; + +export async function getInfo(_req: Request, res: Response) { + try { + const info = await sessionService.getInfo(); + res.status(200).send(info); + } catch (error) { + const message = getErrorMessage(error); + res.status(500).send({ message }); + } +} diff --git a/apps/server/src/api-data/session/session.router.ts b/apps/server/src/api-data/session/session.router.ts new file mode 100644 index 000000000..e2e00dfb0 --- /dev/null +++ b/apps/server/src/api-data/session/session.router.ts @@ -0,0 +1,7 @@ +import express from 'express'; + +import { getInfo } from './session.controller.js'; + +export const router = express.Router(); + +router.get('/info', getInfo); diff --git a/apps/server/src/api-data/session/session.service.ts b/apps/server/src/api-data/session/session.service.ts new file mode 100644 index 000000000..ae264f6fb --- /dev/null +++ b/apps/server/src/api-data/session/session.service.ts @@ -0,0 +1,25 @@ +import { GetInfo } from 'ontime-types'; + +import { getDataProvider } from '../../classes/data-provider/DataProvider.js'; +import { publicFiles } from '../../setup/index.js'; +import { getNetworkInterfaces } from '../../utils/networkInterfaces.js'; + +/** + * Adds business logic to gathering data for the info endpoint + */ +export async function getInfo(): Promise { + const { version, serverPort } = getDataProvider().getSettings(); + const osc = getDataProvider().getOsc(); + + // get nif and inject localhost + const ni = getNetworkInterfaces(); + ni.unshift({ name: 'localhost', address: '127.0.0.1' }); + + return { + networkInterfaces: ni, + version, + serverPort, + osc, + cssOverride: publicFiles.cssOverride, + }; +} diff --git a/apps/server/src/services/project-service/ProjectService.ts b/apps/server/src/services/project-service/ProjectService.ts index 29a1aed76..4b7a7ae88 100644 --- a/apps/server/src/services/project-service/ProjectService.ts +++ b/apps/server/src/services/project-service/ProjectService.ts @@ -1,11 +1,10 @@ -import { DatabaseModel, GetInfo, LogOrigin, ProjectData, ProjectFileListResponse } from 'ontime-types'; +import { DatabaseModel, LogOrigin, ProjectData, ProjectFileListResponse } from 'ontime-types'; import { getErrorMessage } from 'ontime-utils'; import { copyFile, rename } from 'fs/promises'; import { logger } from '../../classes/Logger.js'; -import { getNetworkInterfaces } from '../../utils/networkInterfaces.js'; -import { publicDir, publicFiles } from '../../setup/index.js'; +import { publicDir } from '../../setup/index.js'; import { appendToName, ensureDirectory, @@ -306,26 +305,6 @@ export async function deleteProjectFile(filename: string) { await deleteFile(projectFilePath); } -/** - * Adds business logic to gathering data for the info endpoint - */ -export async function getInfo(): Promise { - const { version, serverPort } = getDataProvider().getSettings(); - const osc = getDataProvider().getOsc(); - - // get nif and inject localhost - const ni = getNetworkInterfaces(); - ni.unshift({ name: 'localhost', address: '127.0.0.1' }); - - return { - networkInterfaces: ni, - version, - serverPort, - osc, - cssOverride: publicFiles.cssOverride, - }; -} - /** * applies a partial database model */