diff --git a/apps/client/src/common/api/db.ts b/apps/client/src/common/api/db.ts index fd31dc5b0..dcc1af003 100644 --- a/apps/client/src/common/api/db.ts +++ b/apps/client/src/common/api/db.ts @@ -112,6 +112,14 @@ export async function loadProject(filename: string): Promise { return res.data; } +/** + * HTTP request to load the demo project file + */ +export async function loadDemo(): Promise { + const res = await axios.post(`${dbPath}/demo`); + return res.data; +} + /** * HTTP request to duplicate a project file */ diff --git a/apps/server/src/api-data/db/db.controller.ts b/apps/server/src/api-data/db/db.controller.ts index c7d3194c3..2c8fc13ed 100644 --- a/apps/server/src/api-data/db/db.controller.ts +++ b/apps/server/src/api-data/db/db.controller.ts @@ -192,6 +192,25 @@ export async function loadProject(req: Request, res: Response) { + try { + const projectName = await projectService.loadDemoProject(); + + res.status(201).send({ + message: `Loaded demo project: ${projectName}`, + }); + } catch (error) { + const message = getErrorMessage(error); + if (message.startsWith('Project file')) { + return res.status(403).send({ message }); + } + res.status(500).send({ message }); + } +} + /** * Duplicates a project file. * Receives the original project filename (`filename`) from the request parameters diff --git a/apps/server/src/api-data/db/db.router.ts b/apps/server/src/api-data/db/db.router.ts index 280229d47..fba331346 100644 --- a/apps/server/src/api-data/db/db.router.ts +++ b/apps/server/src/api-data/db/db.router.ts @@ -6,6 +6,7 @@ import { deleteProjectFile, duplicateProjectFile, listProjects, + loadDemo, loadProject, patchPartialProjectFile, postProjectFile, @@ -36,6 +37,7 @@ router.post('/quick', validateQuickProject, quickProjectFile); router.get('/all', listProjects); router.post('/load', validateFilenameBody, loadProject); +router.post('/demo', loadDemo); router.post('/:filename/duplicate', validateFilenameParam, validateNewFilenameBody, duplicateProjectFile); router.put('/:filename/rename', validateFilenameParam, validateNewFilenameBody, renameProjectFile); router.delete('/:filename', validateFilenameParam, deleteProjectFile); diff --git a/apps/server/src/services/project-service/ProjectService.ts b/apps/server/src/services/project-service/ProjectService.ts index 72a52f680..2b50a0661 100644 --- a/apps/server/src/services/project-service/ProjectService.ts +++ b/apps/server/src/services/project-service/ProjectService.ts @@ -59,10 +59,9 @@ export async function getCurrentProject() { } /** - * Private function loads a demo project - * to be composed in the loading functions + * Loads the demo project */ -async function loadDemoProject(): Promise { +export async function loadDemoProject(): Promise { const pathToNewFile = generateUniqueFileName(publicDir.projectsDir, config.demoProject); await initPersistence(getPathToProject(pathToNewFile), demoDb); const newName = getFileNameFromPath(pathToNewFile);