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();