main
alex 2024-01-23 23:26:35 +01:00
parent 4f8ecc6bc8
commit 5df021d4d2
2 changed files with 64 additions and 36 deletions

View File

@ -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}`)
);

View File

@ -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);