From 5df021d4d25c3208f851999f8b2da10a412cbc07 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 23 Jan 2024 23:26:35 +0100 Subject: [PATCH] website --- server.ts | 25 ++++++++++ src/controllers/websiteController.ts | 75 +++++++++++++++------------- 2 files changed, 64 insertions(+), 36 deletions(-) diff --git a/server.ts b/server.ts index 6be9014..7abc410 100644 --- a/server.ts +++ b/server.ts @@ -20,6 +20,8 @@ import swaggerJsDoc from "swagger-jsdoc"; import syncModels from "./src/models/index"; import logger from "./src/logger/logger"; import passport from "passport"; +import fs from "fs-extra"; +import { cloneWebsiteTemplate } from "./src/controllers/websiteController"; const app: Express = express(); const host = process.env.HOST || "localhost"; const port = Number(process.env.PORT) || 3000; @@ -130,6 +132,29 @@ app.use((err: any, req: any, res: any, next: any) => { syncModels(); +// create tmp folder if not exists + +[ + process.env.WEBSITE_BUILDER_TMP_DIR as string, + process.env.WEBSITE_BUILDER_TMP_CUSTOMER_WEBSITES_DIR as string, +].forEach((dir) => { + fs.mkdir(dir, { recursive: true }, (err) => { + if (err) throw err; + }); +}); + +// clone website template if not exists + +if ( + !fs.pathExistsSync( + process.env.WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string + ) +) { + cloneWebsiteTemplate(); +} + +// start server + app.listen(port, host, () => logger.info(`⚡️[server]: Server is running at http://${host}:${port}`) ); diff --git a/src/controllers/websiteController.ts b/src/controllers/websiteController.ts index e42b94f..42ee74c 100644 --- a/src/controllers/websiteController.ts +++ b/src/controllers/websiteController.ts @@ -11,34 +11,7 @@ const execPromise = util.promisify(exec); // this is a webhook that will be called by github when a new commit is pushed to the website template repository export async function UpdateTemplateWebhook(req: Request, res: Response) { try { - let tmpDirWebsiteTemplate = process.env - .WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string; - - logger.info("UpdateTemplateWebhook", req.body); - - // if website folder exists, pull, else clone - - if (await fs.pathExists(tmpDirWebsiteTemplate)) { - let { stdout } = await execPromise(`git pull`, { - cwd: tmpDirWebsiteTemplate, - }); - - console.log(stdout); - } else { - let { stdout } = await execPromise( - `git clone ${process.env.WEBSITE_BUILDER_TEMPLATE_REPOSITORY_URL} ${tmpDirWebsiteTemplate}` - ); - - console.log(stdout); - } - - // execute npm install - - let { stdout: installOutput } = await execPromise(`npm install`, { - cwd: tmpDirWebsiteTemplate, - }); - - console.log(installOutput); + await cloneWebsiteTemplate(); res.status(200).send({ message: "ok" }); } catch (error) { @@ -47,6 +20,36 @@ export async function UpdateTemplateWebhook(req: Request, res: Response) { } } +export async function cloneWebsiteTemplate() { + let tmpDirWebsiteTemplate = process.env + .WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string; + + // if website folder exists, pull, else clone + + if (await fs.pathExists(tmpDirWebsiteTemplate)) { + let { stdout } = await execPromise(`git pull`, { + cwd: tmpDirWebsiteTemplate, + }); + + console.debug(stdout); + } else { + let { stdout } = await execPromise( + `git clone ${process.env.WEBSITE_BUILDER_TEMPLATE_REPOSITORY_URL} ${tmpDirWebsiteTemplate}` + ); + + console.debug(stdout); + } + + // execute npm install + + let { stdout: installOutput } = await execPromise(`npm install`, { + cwd: tmpDirWebsiteTemplate, + }); + + console.debug(installOutput); + console.debug("website template cloned"); +} + export async function CreateWebsite(req: Request, res: Response) { try { let { storeId } = req.body; @@ -87,13 +90,6 @@ export async function CreateWebsite(req: Request, res: Response) { const storeName = store.name.toLowerCase().replace(/ /g, "-"); - // create database record - - await Website.create({ - website_id: storeName, - store_id: storeId, - }); - const tmpDirWebsiteTemplate = process.env .WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string; const tmpDirCustomerWebsite = `${process.env.WEBSITE_BUILDER_TMP_DIR}/${storeName}`; @@ -118,7 +114,7 @@ export async function CreateWebsite(req: Request, res: Response) { cwd: tmpDirCustomerWebsite, }); - console.log(buildOutput); + console.debug(buildOutput); // copy the build folder to customer websites folder @@ -128,6 +124,13 @@ export async function CreateWebsite(req: Request, res: Response) { await fs.remove(tmpDirCustomerWebsite); + // create database record + + await Website.create({ + website_id: storeName, + store_id: storeId, + }); + res.status(200).send({ message: "oks" }); } catch (error) { console.log("error", error);