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 syncModels from "./src/models/index";
|
||||||
import logger from "./src/logger/logger";
|
import logger from "./src/logger/logger";
|
||||||
import passport from "passport";
|
import passport from "passport";
|
||||||
|
import fs from "fs-extra";
|
||||||
|
import { cloneWebsiteTemplate } from "./src/controllers/websiteController";
|
||||||
const app: Express = express();
|
const app: Express = express();
|
||||||
const host = process.env.HOST || "localhost";
|
const host = process.env.HOST || "localhost";
|
||||||
const port = Number(process.env.PORT) || 3000;
|
const port = Number(process.env.PORT) || 3000;
|
||||||
|
@ -130,6 +132,29 @@ app.use((err: any, req: any, res: any, next: any) => {
|
||||||
|
|
||||||
syncModels();
|
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, () =>
|
app.listen(port, host, () =>
|
||||||
logger.info(`⚡️[server]: Server is running at http://${host}:${port}`)
|
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
|
// 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) {
|
export async function UpdateTemplateWebhook(req: Request, res: Response) {
|
||||||
try {
|
try {
|
||||||
let tmpDirWebsiteTemplate = process.env
|
await cloneWebsiteTemplate();
|
||||||
.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);
|
|
||||||
|
|
||||||
res.status(200).send({ message: "ok" });
|
res.status(200).send({ message: "ok" });
|
||||||
} catch (error) {
|
} 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) {
|
export async function CreateWebsite(req: Request, res: Response) {
|
||||||
try {
|
try {
|
||||||
let { storeId } = req.body;
|
let { storeId } = req.body;
|
||||||
|
@ -87,13 +90,6 @@ export async function CreateWebsite(req: Request, res: Response) {
|
||||||
|
|
||||||
const storeName = store.name.toLowerCase().replace(/ /g, "-");
|
const storeName = store.name.toLowerCase().replace(/ /g, "-");
|
||||||
|
|
||||||
// create database record
|
|
||||||
|
|
||||||
await Website.create({
|
|
||||||
website_id: storeName,
|
|
||||||
store_id: storeId,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tmpDirWebsiteTemplate = process.env
|
const tmpDirWebsiteTemplate = process.env
|
||||||
.WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string;
|
.WEBSITE_BUILDER_TMP_DIR_WEBSITE_TEMPLATE as string;
|
||||||
const tmpDirCustomerWebsite = `${process.env.WEBSITE_BUILDER_TMP_DIR}/${storeName}`;
|
const tmpDirCustomerWebsite = `${process.env.WEBSITE_BUILDER_TMP_DIR}/${storeName}`;
|
||||||
|
@ -118,7 +114,7 @@ export async function CreateWebsite(req: Request, res: Response) {
|
||||||
cwd: tmpDirCustomerWebsite,
|
cwd: tmpDirCustomerWebsite,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(buildOutput);
|
console.debug(buildOutput);
|
||||||
|
|
||||||
// copy the build folder to customer websites folder
|
// copy the build folder to customer websites folder
|
||||||
|
|
||||||
|
@ -128,6 +124,13 @@ export async function CreateWebsite(req: Request, res: Response) {
|
||||||
|
|
||||||
await fs.remove(tmpDirCustomerWebsite);
|
await fs.remove(tmpDirCustomerWebsite);
|
||||||
|
|
||||||
|
// create database record
|
||||||
|
|
||||||
|
await Website.create({
|
||||||
|
website_id: storeName,
|
||||||
|
store_id: storeId,
|
||||||
|
});
|
||||||
|
|
||||||
res.status(200).send({ message: "oks" });
|
res.status(200).send({ message: "oks" });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("error", error);
|
console.log("error", error);
|
||||||
|
|
Loading…
Reference in New Issue