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; +}