65 lines
2.2 KiB
TypeScript
65 lines
2.2 KiB
TypeScript
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import matter from 'gray-matter';
|
|
import axios from 'axios';
|
|
|
|
const STRAPI_URL = process.env.STRAPI_URL || 'http://localhost:1337';
|
|
const STRAPI_TOKEN = process.env.STRAPI_ADMIN_TOKEN; // You'll need to generate this
|
|
|
|
async function migrateProducts() {
|
|
const productsDir = path.join(process.cwd(), 'data/products');
|
|
const locales = ['de', 'en'];
|
|
|
|
for (const locale of locales) {
|
|
const localeDir = path.join(productsDir, locale);
|
|
if (!fs.existsSync(localeDir)) continue;
|
|
|
|
const files = fs.readdirSync(localeDir).filter(f => f.endsWith('.mdx'));
|
|
|
|
for (const file of files) {
|
|
const filePath = path.join(localeDir, file);
|
|
const fileContent = fs.readFileSync(filePath, 'utf8');
|
|
const { data, content } = matter(fileContent);
|
|
|
|
console.log(`Migrating ${data.title} (${locale})...`);
|
|
|
|
try {
|
|
// 1. Check if product exists (by SKU)
|
|
const existing = await axios.get(`${STRAPI_URL}/api/products?filters[sku][$eq]=${data.sku}&locale=${locale}`, {
|
|
headers: { Authorization: `Bearer ${STRAPI_TOKEN}` }
|
|
});
|
|
|
|
const productData = {
|
|
title: data.title,
|
|
sku: data.sku,
|
|
description: data.description,
|
|
application: data.application,
|
|
content: content,
|
|
technicalData: data.technicalData || {}, // This might need adjustment based on how it's stored in MDX
|
|
locale: locale,
|
|
};
|
|
|
|
if (existing.data.data.length > 0) {
|
|
// Update
|
|
const id = existing.data.data[0].id;
|
|
await axios.put(`${STRAPI_URL}/api/products/${id}`, { data: productData }, {
|
|
headers: { Authorization: `Bearer ${STRAPI_TOKEN}` }
|
|
});
|
|
console.log(`Updated ${data.title}`);
|
|
} else {
|
|
// Create
|
|
await axios.post(`${STRAPI_URL}/api/products`, { data: productData }, {
|
|
headers: { Authorization: `Bearer ${STRAPI_TOKEN}` }
|
|
});
|
|
console.log(`Created ${data.title}`);
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error migrating ${data.title}:`, error.response?.data || error.message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Note: This script requires a running Strapi instance and an admin token.
|
|
// migrateProducts();
|