fix conflig pull request

This commit is contained in:
r2xrzh9q2z-lab
2026-02-04 09:26:50 +07:00
30 changed files with 6247 additions and 168 deletions

View File

@@ -0,0 +1,186 @@
require("dotenv").config();
const fs = require("fs").promises;
const path = require("path");
const mongoose = require("mongoose");
const connectDB = require("../config/database");
const Service = require("../models/service");
/**
* Transform service.json data to match Service schema
*/
function transformServiceData(sourceData) {
return {
pageTitle: sourceData.pageTitle || "",
// Breadcrumb navigation section
breadcrumb: {
title: sourceData?.breadcrumb?.title || "",
backgroundImage: sourceData?.breadcrumb?.backgroundImage || "",
shape: sourceData?.breadcrumb?.shape || "",
items: Array.isArray(sourceData?.breadcrumb?.items)
? sourceData.breadcrumb.items.map((item) => ({
label: item.label || "",
href: item.href || "",
}))
: [],
},
// Main services section
services: {
title: {
subTitle: sourceData?.services?.title?.subTitle || "",
mainTitle: sourceData?.services?.title?.mainTitle || "",
},
items: Array.isArray(sourceData?.services?.items)
? sourceData.services.items.map((service) => ({
slug: service.slug || "",
name: service.name || "",
description: service.description || "",
image: service.image || "",
layout: service.layout || "",
details: {
title: service.details?.title || "",
description: service.details?.description || "",
mainImage: service.details?.mainImage || "",
overviewTitle: service.details?.overviewTitle || "",
overviewDescription: service.details?.overviewDescription || "",
additionalDescription:
service.details?.additionalDescription || "",
keyFeaturesTitle: service.details?.keyFeaturesTitle || "",
keyFeaturesImage: service.details?.keyFeaturesImage || "",
features: Array.isArray(service.details?.features)
? service.details.features.map((feature) => ({
icon: feature.icon || "",
title: feature.title || "",
description: feature.description || "",
}))
: [],
faqTitle: service.details?.faqTitle || "",
faqImage: service.details?.faqImage || "",
faq: Array.isArray(service.details?.faq)
? service.details.faq.map((faqItem) => ({
id: faqItem.id || "",
question: faqItem.question || "",
answer: faqItem.answer || "",
isExpanded: faqItem.isExpanded || false,
}))
: [],
},
}))
: [],
},
// Destination countries section
destinations: {
backgroundImage: sourceData?.destinations?.backgroundImage || "",
title: {
subTitle: sourceData?.destinations?.title?.subTitle || "",
mainTitle: sourceData?.destinations?.title?.mainTitle || "",
},
items: Array.isArray(sourceData?.destinations?.items)
? sourceData.destinations.items.map((country) => ({
id: country.id || "",
name: country.name || "",
description: country.description || "",
image: country.image || "",
icon: country.icon || "",
link: country.link || "",
}))
: [],
},
// Visa types section
visas: {
items: Array.isArray(sourceData?.visas?.items)
? sourceData.visas.items.map((visa) => ({
id: visa.id || "",
number: visa.number || "",
name: visa.name || "",
description: visa.description || "",
buttonText: visa.buttonText || "",
buttonLink: visa.buttonLink || "",
}))
: [],
},
// Client reviews section
reviews: {
title: {
subTitle: sourceData?.reviews?.title?.subTitle || "",
mainTitle: sourceData?.reviews?.title?.mainTitle || "",
},
viewAllButton: {
text: sourceData?.reviews?.viewAllButton?.text || "",
icon: sourceData?.reviews?.viewAllButton?.icon || "",
link: sourceData?.reviews?.viewAllButton?.link || "",
},
thumb: sourceData?.reviews?.thumb || "",
items: Array.isArray(sourceData?.reviews?.items)
? sourceData.reviews.items.map((review) => ({
id: review.id || "",
rating: review.rating || 5,
content: review.content || "",
author: {
name: review.author?.name || "",
type: review.author?.type || "",
},
icon: review.icon || "",
}))
: [],
navigation: {
prevButton: sourceData?.reviews?.navigation?.prevButton || "",
nextButton: sourceData?.reviews?.navigation?.nextButton || "",
prevIcon: sourceData?.reviews?.navigation?.prevIcon || "",
nextIcon: sourceData?.reviews?.navigation?.nextIcon || "",
},
},
updatedAt: new Date(),
};
}
/**
* Migration function for service page data
*/
async function migrateServiceData() {
try {
await connectDB();
console.log("🚀 Starting service page migration...");
// Clear existing service documents
await Service.deleteMany({});
console.log("🗑️ Cleared existing service documents");
// Read service.json file
const serviceJsonPath = path.join(__dirname, "..", "data", "service.json");
const rawJsonData = await fs.readFile(serviceJsonPath, "utf8");
const sourceServiceData = JSON.parse(rawJsonData);
// Transform data to match schema
const transformedServiceData = transformServiceData(sourceServiceData);
// Create new service document
const newService = new Service(transformedServiceData);
const savedService = await newService.save();
console.log("✅ Service page migration completed successfully!");
console.log(`📄 Service document ID: ${savedService._id}`);
await mongoose.disconnect();
process.exit(0);
} catch (error) {
console.error("❌ Service migration error:", error);
process.exit(1);
}
}
// Run migration if called directly
if (require.main === module) {
migrateServiceData();
}
module.exports = {
migrate: migrateServiceData,
transformServiceData,
};