From 4cd2dcbab0d83ddb4c7419ed90c5c87cfdb78e66 Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Tue, 25 Feb 2025 21:02:21 +0100 Subject: [PATCH] refactor: move logic to service --- .../api-data/project/project.controller.ts | 22 ++++----------- .../project-service/ProjectService.ts | 27 ++++++++++++++++++- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/apps/server/src/api-data/project/project.controller.ts b/apps/server/src/api-data/project/project.controller.ts index 4e5255dfc..15139b3d5 100644 --- a/apps/server/src/api-data/project/project.controller.ts +++ b/apps/server/src/api-data/project/project.controller.ts @@ -2,12 +2,11 @@ import { ErrorResponse, ProjectData } from 'ontime-types'; import { getErrorMessage } from 'ontime-utils'; import type { Request, Response } from 'express'; -import { join } from 'path'; -import { deleteFile, removeUndefined } from '../../utils/parserUtils.js'; +import { removeUndefined } from '../../utils/parserUtils.js'; import { failEmptyObjects } from '../../utils/routerUtils.js'; import { getDataProvider } from '../../classes/data-provider/DataProvider.js'; -import { publicDir } from '../../setup/index.js'; +import { editCurrentProjectData } from '../../services/project-service/ProjectService.js'; export function getProjectData(_req: Request, res: Response) { res.json(getDataProvider().getProjectData()); @@ -19,9 +18,7 @@ export async function postProjectData(req: Request, res: Response = removeUndefined({ + const newData: Partial = removeUndefined({ title: req.body?.title, description: req.body?.description, publicUrl: req.body?.publicUrl, @@ -32,18 +29,9 @@ export async function postProjectData(req: Request, res: Response { - /** we do not handle this error */ - }); - } - - res.status(200).send(newData); + res.status(200).send(updatedData); } catch (error) { const message = getErrorMessage(error); res.status(400).send({ message }); diff --git a/apps/server/src/services/project-service/ProjectService.ts b/apps/server/src/services/project-service/ProjectService.ts index 486b35516..c56fcfe72 100644 --- a/apps/server/src/services/project-service/ProjectService.ts +++ b/apps/server/src/services/project-service/ProjectService.ts @@ -1,6 +1,7 @@ -import { DatabaseModel, LogOrigin, ProjectFileListResponse } from 'ontime-types'; +import { DatabaseModel, LogOrigin, ProjectData, ProjectFileListResponse } from 'ontime-types'; import { getErrorMessage } from 'ontime-utils'; +import { join } from 'path'; import { copyFile } from 'fs/promises'; import { logger } from '../../classes/Logger.js'; @@ -311,3 +312,27 @@ export async function patchCurrentProject(data: Partial) { return newData; } + +/** + * Changes the title of a project + * it handles invalidating the necessary data + */ +export async function editCurrentProjectData(newData: Partial) { + const currentProjectData = getDataProvider().getProjectData(); + const updatedProjectData = await getDataProvider().setProjectData(newData); + + if (currentProjectData.title !== updatedProjectData.title) { + // something + } + + // Delete the old logo if the logo has been removed + if (!updatedProjectData.projectLogo && currentProjectData.projectLogo) { + const filePath = join(publicDir.logoDir, currentProjectData.projectLogo); + + deleteFile(filePath).catch((_error) => { + /** we do not handle this error */ + }); + } + + return updatedProjectData; +}