website
parent
4f8ecc6bc8
commit
5df021d4d2
25
server.ts
25
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}`)
|
||||
);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue