forked from UKSOURCE/cms.hailearning.edu.vn
116 lines
3.2 KiB
JavaScript
116 lines
3.2 KiB
JavaScript
require("dotenv").config();
|
|
const connectDB = require("../config/database");
|
|
|
|
const DEFAULT_FACEBOOK_URL = "https://www.facebook.com/hailearning.edu.vn/";
|
|
const DEFAULT_PANEL_TITLE = "Do you need any additional advice or support?";
|
|
const DEFAULT_BRAND_IMAGE = "/assets/img/logo/black-logo.svg";
|
|
const DEFAULT_FACEBOOK_ICON = "/uploads/home/floating-contact/Facebook_Logo_Primary.webp";
|
|
const DEFAULT_ZALO_ICON = "/uploads/home/floating-contact/Icon_of_Zalo.svg.webp";
|
|
|
|
function normalizePhoneForZalo(value = "") {
|
|
const digits = String(value).replace(/\D/g, "");
|
|
|
|
if (!digits) {
|
|
return "";
|
|
}
|
|
|
|
if (digits.startsWith("84")) {
|
|
return digits;
|
|
}
|
|
|
|
if (digits.startsWith("0")) {
|
|
return `84${digits.slice(1)}`;
|
|
}
|
|
|
|
return digits;
|
|
}
|
|
|
|
async function migrate() {
|
|
const mongoose = require("mongoose");
|
|
let ownConn = false;
|
|
|
|
try {
|
|
const wasConnected = mongoose.connection.readyState === 1;
|
|
await connectDB();
|
|
if (!wasConnected) {
|
|
ownConn = true;
|
|
}
|
|
|
|
const Home = require("../models/home");
|
|
const Footer = require("../models/footer");
|
|
|
|
const footer = await Footer.findOne().sort({ updatedAt: -1 }).lean();
|
|
const footerPhone = footer?.top?.phone?.href || footer?.top?.phone?.display || "";
|
|
const zaloPhone = normalizePhoneForZalo(footerPhone) || "84961834040";
|
|
const zaloUrl = `https://zalo.me/${zaloPhone}`;
|
|
|
|
const defaultFloatingContact = {
|
|
enabled: true,
|
|
position: "bottom-right",
|
|
panelTitle: DEFAULT_PANEL_TITLE,
|
|
brand: {
|
|
imageSrc: DEFAULT_BRAND_IMAGE,
|
|
imageAlt: "HAI Learning",
|
|
},
|
|
trigger: {
|
|
icon: "fa-comments",
|
|
},
|
|
actions: [
|
|
{
|
|
id: "facebook",
|
|
platform: "facebook",
|
|
enabled: true,
|
|
label: "Message via Facebook",
|
|
subtitle: "facebook.com/hailearning.edu.vn",
|
|
href: DEFAULT_FACEBOOK_URL,
|
|
iconImage: DEFAULT_FACEBOOK_ICON,
|
|
iconType: "iconClass",
|
|
iconClass: "fa-brands fa-facebook-messenger",
|
|
iconText: "",
|
|
order: 1,
|
|
},
|
|
{
|
|
id: "zalo",
|
|
platform: "zalo",
|
|
enabled: true,
|
|
label: "Message via Zalo",
|
|
subtitle: `zalo.me/${zaloPhone}`,
|
|
href: zaloUrl,
|
|
iconImage: DEFAULT_ZALO_ICON,
|
|
iconType: "iconText",
|
|
iconClass: "",
|
|
iconText: "Zalo",
|
|
order: 2,
|
|
},
|
|
],
|
|
};
|
|
|
|
const updateResult = await Home.updateMany(
|
|
{ floatingContact: { $exists: false } },
|
|
{ $set: { floatingContact: defaultFloatingContact } },
|
|
);
|
|
|
|
if (updateResult.matchedCount === 0) {
|
|
await Home.create({ floatingContact: defaultFloatingContact });
|
|
console.log("Created a Home document with default floatingContact data.");
|
|
} else {
|
|
console.log(
|
|
`Updated ${updateResult.modifiedCount} Home document(s) with floatingContact defaults.`,
|
|
);
|
|
}
|
|
|
|
if (ownConn && mongoose.connection.readyState === 1) {
|
|
await mongoose.disconnect();
|
|
}
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error("Failed to add floatingContact to Home:", error);
|
|
if (ownConn && mongoose.connection.readyState === 1) {
|
|
await mongoose.disconnect();
|
|
}
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
migrate();
|