// panel/seed-content.js // Run: node panel/seed-content.js // Seeds all hardcoded frontend content into the panel DB via the REST API. // Idempotent: skips any endpoint that already has data. const BASE = process.env.SEED_BASE || `http://localhost:${process.env.PORT || 3000}`; const USERNAME = process.env.ADMIN_USERNAME || 'admin'; const PASSWORD = process.env.ADMIN_PASSWORD || 'Andishkade1403'; let cookie = ''; async function req(path, { method = 'GET', body } = {}) { const headers = { 'Content-Type': 'application/json' }; if (cookie) headers['Cookie'] = cookie; const res = await fetch(`${BASE}${path}`, { method, headers, body: body ? JSON.stringify(body) : undefined, }); const text = await res.text(); if (!res.ok) throw new Error(`${method} ${path} → ${res.status}: ${text}`); const sc = res.headers.get('set-cookie'); if (sc) cookie = sc.split(';')[0]; return text ? JSON.parse(text) : null; } async function seedIfEmpty(label, checkPath, items, postFn) { const existing = await req(checkPath); if (Array.isArray(existing) && existing.length > 0) { console.log(` SKIP ${label} (${existing.length} records exist)`); return; } console.log(` SEED ${label} (${items.length} items)...`); for (const item of items) { try { await postFn(item); } catch (e) { console.warn(` WARN ${label}:`, e.message); } } console.log(` OK ${label}`); } // ── DATA ────────────────────────────────────────────────────────────────────── const EVENTS = [ { titleFa: 'کنگره بین‌المللی فولاد ایران ۱۴۰۳', titleEn: 'Iran International Steel Congress 1403', dateFa: '12', dateEn: '12', monthFa: 'اسفند', monthEn: 'March', year: 1403, type: 'conference', locationFa: 'مرکز همایش‌های بین‌المللی تهران', locationEn: 'Tehran International Conference Centre', cityFa: 'تهران', cityEn: 'Tehran', descriptionFa: 'بزرگ‌ترین گردهمایی سالانه متخصصان، سیاست‌گذاران و فعالان صنعت فولاد ایران با حضور ۱۲۰۰ نفر شرکت‌کننده از ۲۵ کشور.', descriptionEn: 'The largest annual gathering of Iran steel industry specialists — 1,200 participants from 25 countries.', registrationOpen: 1, sortOrder: 1 }, { titleFa: 'Middle East Steel & Metals 2024', titleEn: 'Middle East Steel & Metals 2024', dateFa: '25', dateEn: '25', monthFa: 'اسفند', monthEn: 'March', year: 1403, type: 'exhibition', locationFa: 'مرکز نمایشگاهی دبی ورلد ترید سنتر', locationEn: 'Dubai World Trade Centre', cityFa: 'دبی', cityEn: 'Dubai', descriptionFa: 'نمایشگاه تخصصی فولاد و فلزات خاورمیانه با حضور بیش از ۳۰۰ شرکت از ۴۰ کشور.', descriptionEn: 'Middle East steel and metals exhibition — 300+ companies from 40 countries.', registrationOpen: 1, sortOrder: 2 }, { titleFa: 'نشست تخصصی سیاست‌گذاری فولاد ۱۴۰۴', titleEn: 'Steel Policy Seminar 1404', dateFa: '8', dateEn: '8', monthFa: 'فروردین', monthEn: 'April', year: 1404, type: 'seminar', locationFa: 'پژوهشکده توسعه صنعتی ایران', locationEn: 'Iran Industrial Development Research Institute', cityFa: 'تهران', cityEn: 'Tehran', descriptionFa: 'نشست تخصصی با حضور نمایندگان وزارت صمت، سازمان ایمیدرو و انجمن‌های تخصصی.', descriptionEn: 'Expert session with representatives from MIMT, IMIDRO and industry associations.', registrationOpen: 1, sortOrder: 3 }, { titleFa: 'World Steel Forum 2025', titleEn: 'World Steel Forum 2025', dateFa: '20', dateEn: '20', monthFa: 'فروردین', monthEn: 'April', year: 1404, type: 'international', locationFa: 'مرکز کنفرانس برلین', locationEn: 'Berlin Conference Centre', cityFa: 'برلین', cityEn: 'Berlin', descriptionFa: 'اجلاس سالانه انجمن جهانی فولاد با تمرکز بر کربن‌زدایی، تجارت جهانی و تحولات ساختاری.', descriptionEn: 'World Steel Association annual summit on decarbonisation, global trade and structural change.', registrationOpen: 0, sortOrder: 4 }, { titleFa: 'نمایشگاه متالورژی ایران', titleEn: 'Iran Metallurgy Expo', dateFa: '15', dateEn: '15', monthFa: 'اردیبهشت', monthEn: 'May', year: 1404, type: 'exhibition', locationFa: 'نمایشگاه بین‌المللی اصفهان', locationEn: 'Isfahan International Exhibition', cityFa: 'اصفهان', cityEn: 'Isfahan', descriptionFa: 'نمایشگاه تخصصی متالورژی، فولاد و فلزات غیرآهنی ایران با فناوری‌های نوین تولید.', descriptionEn: 'Specialised Iran metallurgy, steel and non-ferrous metals exhibition.', registrationOpen: 0, sortOrder: 5 }, { titleFa: 'اجلاس OECD فولاد', titleEn: 'OECD Steel Summit', dateFa: '3', dateEn: '3', monthFa: 'خرداد', monthEn: 'June', year: 1404, type: 'international', locationFa: 'دفتر مرکزی OECD', locationEn: 'OECD Headquarters', cityFa: 'پاریس', cityEn: 'Paris', descriptionFa: 'نشست سالانه کمیته فولاد OECD برای بررسی مازاد ظرفیت جهانی و استانداردهای پایداری.', descriptionEn: 'OECD Steel Committee annual session on global overcapacity and sustainability standards.', registrationOpen: 0, sortOrder: 6 }, ]; const TEAM = [ { nameFa: 'دکتر علی محمدی', nameEn: 'Dr. Ali Mohammadi', roleFa: 'مدیر ارشد پژوهش', roleEn: 'Chief Research Officer', initial: 'م', bioFa: 'دکتری اقتصاد صنعتی از دانشگاه تهران با بیش از ۱۸ سال تجربه در تحلیل بازارهای فولاد و فلزات.', bioEn: 'PhD in Industrial Economics from University of Tehran, 18+ years in steel/metals market analysis.', expertise: ['اقتصاد صنعتی','تحلیل بازار فولاد','سیاست‌گذاری صنعتی','مدل‌سازی اقتصادی','تجارت بین‌الملل'], reportCount: 52, email: 'mohammadi@andishkade-foolad.ir', isExpert: 0, sortOrder: 1 }, { nameFa: 'دکتر فاطمه احمدی', nameEn: 'Dr. Fatemeh Ahmadi', roleFa: 'مدیر تحقیقات ریسک', roleEn: 'Risk Research Director', initial: 'ا', bioFa: 'دکتری مدیریت ریسک از دانشگاه علم و صنعت ایران با تخصص در ارزیابی ریسک‌های ژئوپلیتیک.', bioEn: 'PhD in Risk Management from IUST, specialising in geopolitical and supply-chain risk.', expertise: ['مدیریت ریسک','تحریم‌پژوهی','ژئوپلیتیک انرژی','تأمین مالی پروژه','مذاکرات تجاری'], reportCount: 38, email: 'ahmadi@andishkade-foolad.ir', isExpert: 0, sortOrder: 2 }, { nameFa: 'دکتر حسین کریمی', nameEn: 'Dr. Hossein Karimi', roleFa: 'تحلیلگر ارشد بازار', roleEn: 'Senior Market Analyst', initial: 'ک', bioFa: 'دکتری مهندسی مواد از دانشگاه صنعتی اصفهان با تخصص در متالورژی و اقتصاد بازار کامودیتی‌ها.', bioEn: 'PhD in Materials Engineering from Isfahan UT, combined expertise in metallurgy and commodity economics.', expertise: ['بازار جهانی فولاد','قیمت‌گذاری کامودیتی','متالورژی صنعتی','پیش‌بینی تقاضا','بازارهای آسیایی'], reportCount: 41, email: 'karimi@andishkade-foolad.ir', isExpert: 0, sortOrder: 3 }, { nameFa: 'مهندس سارا رضایی', nameEn: 'Eng. Sara Rezaei', roleFa: 'پژوهشگر ارشد انرژی', roleEn: 'Senior Energy Researcher', initial: 'ر', bioFa: 'کارشناسی ارشد مهندسی انرژی از دانشگاه شریف با تمرکز بر بهینه‌سازی مصرف انرژی در صنایع سنگین.', bioEn: 'MSc in Energy Engineering from Sharif UT, focusing on energy optimisation in heavy industry.', expertise: ['انرژی صنعتی','ESG و پایداری','کربن‌زدایی','بهره‌وری انرژی','مقررات زیست‌محیطی'], reportCount: 29, email: 'rezaei@andishkade-foolad.ir', isExpert: 0, sortOrder: 4 }, { nameFa: 'مهندس رضا توکلی', nameEn: 'Eng. Reza Tavakoli', roleFa: 'تحلیلگر بازار کامودیتی', roleEn: 'Commodity Market Analyst', initial: 'ت', bioFa: 'کارشناسی ارشد اقتصاد از دانشگاه تهران با تخصص در تحلیل بنیادی و تکنیکال بازارهای کامودیتی.', bioEn: 'MSc in Economics from University of Tehran, specialising in fundamental and technical commodity analysis.', expertise: ['بورس کالا','تحلیل تکنیکال','بازارهای آتی','قیمت‌گذاری سنگ‌آهن','بازار داخلی فولاد'], reportCount: 34, email: 'tavakoli@andishkade-foolad.ir', isExpert: 0, sortOrder: 5 }, { nameFa: 'دکتر مریم حسینی', nameEn: 'Dr. Maryam Hosseini', roleFa: 'پژوهشگر ارشد صادرات', roleEn: 'Senior Export Researcher', initial: 'ح', bioFa: 'دکتری بازاریابی بین‌الملل از دانشگاه الزهرا با تجربه گسترده در بازارهای صادراتی آسیا، آفریقا و اروپای شرقی.', bioEn: 'PhD in International Marketing from Alzahra University, extensive experience in Asia, Africa and Eastern Europe export markets.', expertise: ['بازاریابی بین‌الملل','توسعه صادرات','بازار آفریقا و آسیا','استراتژی بازار','مذاکرات تجاری'], reportCount: 22, email: 'hosseini@andishkade-foolad.ir', isExpert: 0, sortOrder: 6 }, ]; const PLANS = [ { nameFa: 'فردی', nameEn: 'Individual', price: 350000, periodFa: 'ماهانه', periodEn: 'Monthly', features: ['دسترسی به تمام گزارش‌های پایه','دانلود ۵ گزارش در ماه','دریافت خبرنامه هفتگی','دسترسی به داده‌های قیمت لحظه‌ای','آرشیو ۱۲ ماه گذشته'], isFeatured: 0, ctaFa: 'شروع اشتراک', ctaEn: 'Start subscription', sortOrder: 1 }, { nameFa: 'سازمانی', nameEn: 'Organisational', price: 1200000, periodFa: 'ماهانه', periodEn: 'Monthly', features: ['دسترسی کامل به تمام گزارش‌ها','دانلود نامحدود گزارش','دسترسی برای ۵ کاربر همزمان','گزارش‌های ویژه و تحلیل‌های فوری','آرشیو کامل از ابتدای تأسیس','مشاوره تلفنی ماهانه با تحلیلگران','داشبورد اختصاصی تحلیل بازار'], badgeFa: 'پرطرفدار', badgeEn: 'Popular', isFeatured: 1, ctaFa: 'شروع اشتراک', ctaEn: 'Start subscription', sortOrder: 2 }, { nameFa: 'وزارتخانه', nameEn: 'Ministry', price: 0, periodFa: 'سالانه', periodEn: 'Annual', features: ['دسترسی نامحدود برای تمام کارکنان','سفارش گزارش‌های تحلیلی اختصاصی','نشست‌های تخصصی حضوری با تیم پژوهشی','پشتیبانی اولویت‌دار ۲۴/۷','داشبورد تصمیم‌گیری یکپارچه','API اتصال به سیستم‌های داخلی','آموزش و کارگاه‌های تخصصی دوره‌ای','گزارش‌دهی سفارشی برای سیاست‌گذاران'], isFeatured: 0, ctaFa: 'درخواست مشاوره', ctaEn: 'Request consultation', sortOrder: 3 }, ]; const BANNERS = [ { position: 'featured', active: 1, image: '/Horizontal_Book_Mockup_6 1.webp', ctaUrl: '', overlineFa: 'ماهنامه شماره ۱۲ منتشر شد...', titleFa: 'دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک', subtitleFa: 'Mineral Diplomacy in the Era of Geopolitical Blockades', ctaLabelFa: 'دانلود گزارش', overlineEn: 'Monthly issue #12 is out...', titleEn: 'Mineral Diplomacy in the Era of Geopolitical Blockades', subtitleEn: 'دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک', ctaLabelEn: 'Download report', sortOrder: 1 }, { position: 'glance', active: 1, image: '/summit-banner.jpg', ctaUrl: '/events', overlineFa: 'نشست تخصصیِ راهبردی', titleFa: 'اجلاس دیپلماسی معدنی و تاب‌آوریِ زنجیره‌ی تامین', subtitleFa: 'Mineral Diplomacy & Supply-Chain Resilience Summit', ctaLabelFa: 'اطلاعات بیشتر و ثبت‌نام', overlineEn: 'Strategic Session', titleEn: 'Mineral Diplomacy & Supply-Chain Resilience Summit', subtitleEn: 'اجلاس دیپلماسی معدنی و تاب‌آوریِ زنجیره‌ی تامین', ctaLabelEn: 'Learn more & register', sortOrder: 2 }, { position: 'media-split', active: 1, image: '/Horizontal_Book_Mockup_6 1.webp', ctaUrl: '/podcast', overlineFa: 'پادکست و ویدیوکست جدید', titleFa: 'کالبدشکافی عقلانی پیچیدگی‌های صنعتی', subtitleFa: 'Steel Industry Podcast & Videocast Series', ctaLabelFa: 'شنیدن پادکست', overlineEn: 'New Podcast & Videocast', titleEn: 'Deconstruction of Industrial Complexities', subtitleEn: 'کالبدشکافی عقلانی پیچیدگی‌های صنعتی', ctaLabelEn: 'Listen Podcast', sortOrder: 3 }, { position: 'radar-market', active: 1, image: '/news/photo-1611974789855-9c2a0a7236a3.jpg', ctaUrl: '', overlineFa: 'تحلیل ویژه', titleFa: 'معماری نوین زنجیره تأمین', subtitleFa: 'A New Supply-Chain Architecture', ctaLabelFa: 'دانلود گزارش', overlineEn: 'Special Analysis', titleEn: 'A New Supply-Chain Architecture', subtitleEn: 'معماری نوین زنجیره تأمین', ctaLabelEn: 'Download report', sortOrder: 4 }, { position: 'radar-sustainability', active: 1, image: '/news/photo-1466611653911-95081537e5b7.jpg', ctaUrl: '', overlineFa: 'تحلیل ویژه', titleFa: 'مسیر کربن‌زدایی صنعت فولاد', subtitleFa: 'The Steel Decarbonization Pathway', ctaLabelFa: 'دانلود گزارش', overlineEn: 'Special Analysis', titleEn: 'The Steel Decarbonization Pathway', subtitleEn: 'مسیر کربن‌زدایی صنعت فولاد', ctaLabelEn: 'Download report', sortOrder: 5 }, { position: 'radar-geopolitics', active: 1, image: '/news/photo-1518770660439-4636190af475.jpg', ctaUrl: '', overlineFa: 'تحلیل ویژه', titleFa: 'ژئوپلیتیک تجارت فولاد', subtitleFa: 'The Geopolitics of Steel Trade', ctaLabelFa: 'دانلود گزارش', overlineEn: 'Special Analysis', titleEn: 'The Geopolitics of Steel Trade', subtitleEn: 'ژئوپلیتیک تجارت فولاد', ctaLabelEn: 'Download report', sortOrder: 6 }, { position: 'radar-technology', active: 1, image: '/news/photo-1581092160607-ee22731c9b4e.jpg', ctaUrl: '', overlineFa: 'تحلیل ویژه', titleFa: 'انقلاب دیجیتال در صنعت فولاد', subtitleFa: 'The Digital Revolution in Steel', ctaLabelFa: 'دانلود گزارش', overlineEn: 'Special Analysis', titleEn: 'The Digital Revolution in Steel', subtitleEn: 'انقلاب دیجیتال در صنعت فولاد', ctaLabelEn: 'Download report', sortOrder: 7 }, ]; const VISION_ITEMS = [ { icon: 'FlaskConical', titleFa: 'پیشرو در پژوهش', titleEn: 'Research Leadership', descFa: 'تولید تحلیل‌های راهبردی و گزارش‌های تخصصی در حوزه صنعت فولاد', descEn: 'Producing strategic analyses and specialised reports in the steel industry', sortOrder: 1 }, { icon: 'Network', titleFa: 'شبکه‌سازی خبرگان', titleEn: 'Expert Networking', descFa: 'ایجاد پیوند میان متخصصان، سیاست‌گذاران و فعالان صنعتی', descEn: 'Building connections between specialists, policymakers, and industry practitioners', sortOrder: 2 }, { icon: 'Leaf', titleFa: 'فولاد سبز', titleEn: 'Green Steel', descFa: 'ترویج رویکردهای پایدار و کاهش اثرات زیست‌محیطی در زنجیره فولاد', descEn: 'Promoting sustainable approaches and reducing environmental impacts across the steel chain', sortOrder: 3 }, ]; const ADVISORY_BOARD = [ { nameFa: 'دکتر علیرضا اکبریان', nameEn: 'Dr. Alireza Akbarian', roleFa: 'مدیر اندیشکده', roleEn: 'Institute Director', sortOrder: 1 }, { nameFa: 'مهندس سارا محمدی', nameEn: 'Eng. Sara Mohammadi', roleFa: 'پژوهشگر ارشد فولاد سبز', roleEn: 'Senior Green Steel Researcher', sortOrder: 2 }, { nameFa: 'دکتر محمد جلالی', nameEn: 'Dr. Mohammad Jalali', roleFa: 'تحلیلگر بازارهای جهانی', roleEn: 'Global Markets Analyst', sortOrder: 3 }, { nameFa: 'دکتر فاطمه رضایی', nameEn: 'Dr. Fatemeh Rezaei', roleFa: 'متخصص ژئوپلیتیک صنعتی', roleEn: 'Industrial Geopolitics Specialist', sortOrder: 4 }, { nameFa: 'مهندس رضا کریمی', nameEn: 'Eng. Reza Karimi', roleFa: 'کارشناس فناوری و نوآوری', roleEn: 'Technology & Innovation Expert', sortOrder: 5 }, ]; const VIDEOS = [ { title: 'نگاهی به آن سوی مرزهای تولید', author: 'مهندس سیامک فجری', summary: 'فراتر از داده‌های خام قیمت و تناژ، به سراغ مهندسی تغییر و معماری آینده صنعت می‌رویم.', type: 'video', category: 'تولید داخلی', publishDate: '۲۵ خرداد ۱۴۰۵', coverImage: '/news/photo-1504307651254-35680f356dfd.jpg', isFree: true, tags: ['EP.12','ویدیوکست'] }, { title: 'تحلیل بازار جهانی فلزات پایه', author: 'دکتر نیلوفر احمدی', summary: 'نوسانات قیمت مس، آلومینیوم و روی و تأثیر آن بر زنجیره ارزش فولاد.', type: 'video', category: 'بازار جهانی', publishDate: '۱۸ خرداد ۱۴۰۵', coverImage: '/news/photo-1558618666-fcd25c85cd64.jpg', isFree: true, tags: ['EP.11','ویدیوکست'] }, { title: 'ژئوپلیتیک و صادرات فولاد ایران', author: 'مهندس فرید تهرانی', summary: 'تأثیر تحولات منطقه‌ای بر بازارهای صادراتی فولاد ایران و فرصت‌های پیش رو.', type: 'video', category: 'صادرات', publishDate: '۱۱ خرداد ۱۴۰۵', coverImage: '/news/photo-1504328345606-18bbc8c9d7d1.jpg', isFree: true, tags: ['EP.10','ویدیوکست'] }, { title: 'سرمایه‌گذاری در زنجیره ارزش فولاد', author: 'دکتر آرش کریمی', summary: 'فرصت‌ها و چالش‌های سرمایه‌گذاری در بخش‌های مختلف زنجیره ارزش فولاد.', type: 'video', category: 'بازار جهانی', publishDate: '۴ خرداد ۱۴۰۵', coverImage: '/news/photo-1611273426858-450d8e3c9fce.jpg', isFree: true, tags: ['EP.09','ویدیوکست'] }, { title: 'آینده فولاد سبز در ایران', author: 'مهندس کاوه رستمی', summary: 'مسیر گذار به فولاد کم‌کربن در ایران؛ چالش‌ها، فرصت‌ها و ضرورت سرمایه‌گذاری.', type: 'video', category: 'انرژی و ESG', publishDate: '۲۸ اردیبهشت ۱۴۰۵', coverImage: '/news/photo-1566873535350-6586b0b7a1f2.jpg', isFree: true, tags: ['EP.08','ویدیوکست'] }, { title: 'هوش مصنوعی و تحول کارخانه‌های فولاد', author: 'دکتر رضا محمدی', summary: 'چگونه یادگیری ماشین کارایی خطوط تولید فولاد را متحول می‌کند.', type: 'video', category: 'تولید داخلی', publishDate: '۲۱ اردیبهشت ۱۴۰۵', coverImage: '/news/photo-1578662996442-48f60103fc96.jpg', isFree: true, tags: ['EP.07','ویدیوکست'] }, ]; const PODCASTS = [ { title: 'کالبدشکافی عقلانی پیچیدگی‌های صنعتی', author: 'مهندس سیامک شجاعی', summary: 'صنعت فولاد در عصر حاضر، در پیچیده‌ترین چرخه حیات خود قرار گرفته است؛ جایی که همگرایی هوش مصنوعی، الزامات زیست‌محیطی و تنش‌های ژئواکونومیک، قواعد کلاسیک تولید و تجارت را به‌کلی بازنویسی کرده‌اند.', type: 'podcast', category: 'تولید داخلی', publishDate: '۲۵ / خرداد / ۱۴۰۵', coverImage: '/news/photo-1540575467063-178a50c2df87.jpg', isFree: true, tags: ['اپیزود ۷۷','پادکست'] }, { title: 'آزمایشگاه کوره؛ فناوری‌های نوین فولادسازی', author: 'دکتر رضا محمدی', summary: 'در این اپیزود با نگاهی موشکافانه به چالش‌های فنی گذار از کوره‌های بلند به فولادسازی پاک می‌پردازیم.', type: 'podcast', category: 'تولید داخلی', publishDate: '۱۸ / خرداد / ۱۴۰۵', coverImage: '/news/photo-1566873535350-6586b0b7a1f2.jpg', isFree: true, tags: ['اپیزود ۷۶','پادکست'] }, { title: 'معمار فولاد؛ رهبری در عصر تحول', author: 'مهندس کاوه رستمی', summary: 'داستان ساختن فولاد فردا؛ روایت رهبرانی که مدل‌های سنتی کسب‌وکار را به چالش کشیده‌اند.', type: 'podcast', category: 'تولید داخلی', publishDate: '۱۱ / خرداد / ۱۴۰۵', coverImage: '/news/photo-1578662996442-48f60103fc96.jpg', isFree: true, tags: ['اپیزود ۷۵','پادکست'] }, { title: 'فولاد سبز؛ رویا یا واقعیت؟', author: 'دکتر نیلوفر احمدی', summary: 'بررسی مسیر دشوار و پرهزینه گذار به تولید فولاد با کمترین انتشار کربن و آنچه صنعت ایران باید بداند.', type: 'podcast', category: 'انرژی و ESG', publishDate: '۴ / خرداد / ۱۴۰۵', coverImage: '/news/photo-1504328345606-18bbc8c9d7d1.jpg', isFree: true, tags: ['اپیزود ۷۴','پادکست'] }, { title: 'بازی بزرگ؛ چین، هند و آینده بازار فولاد', author: 'مهندس فرید تهرانی', summary: 'چگونه رقابت دو غول آسیایی مسیر بازار جهانی فولاد را در دهه پیش رو تغییر خواهد داد.', type: 'podcast', category: 'بازار جهانی', publishDate: '۲۸ / اردیبهشت / ۱۴۰۵', coverImage: '/news/photo-1558618666-fcd25c85cd64.jpg', isFree: true, tags: ['اپیزود ۷۳','پادکست'] }, { title: 'هوش مصنوعی در خط تولید فولاد', author: 'دکتر آرش کریمی', summary: 'کاربردهای عملی یادگیری ماشین در بهینه‌سازی فرآیند ذوب، کنترل کیفیت و نگهداری پیش‌گیرانه.', type: 'podcast', category: 'تولید داخلی', publishDate: '۲۱ / اردیبهشت / ۱۴۰۵', coverImage: '/news/photo-1611273426858-450d8e3c9fce.jpg', isFree: true, tags: ['اپیزود ۷۲','پادکست'] }, ]; const RADAR_ITEMS = [ { category: 'commodity', img: '/news/photo-1611273426858-450d8e3c9fce.jpg', authorName: 'دکتر سارا احمدی', authorAvatar: '/news/photo-1494790108377-be9c29b29330.jpg', titleFa: 'پیش‌بینی بازار با هوش مصنوعی', dateFa: '۱۴ اردیبهشت ۱۴۰۵', excerptFa: 'مدل‌های یادگیری ماشین تقاضای لیتیوم و فلزات باتری را در افق ۲۰۳۵ بازتعریف می‌کنند.', titleEn: 'AI-Powered Market Forecasting', dateEn: 'May 4, 2026', excerptEn: 'Machine-learning models are redefining lithium and battery-metal demand on the 2035 horizon.', sortOrder: 1 }, { category: 'tech', img: '/news/photo-1581092160607-ee22731c9b4e.jpg', authorName: 'مهندس رضا کریمی', authorAvatar: '/news/photo-1500648767791-00dcc994a43e.jpg', titleFa: 'تحول دیجیتال در زنجیره ارزش فولاد', dateFa: '۱۴ اردیبهشت ۱۴۰۵', excerptFa: 'تحول دیجیتال و اتوماسیون هوشمند در حال تغییر بنیادین زنجیره ارزش فولاد هستند.', titleEn: 'Digital Transformation in Steel Value Chain', dateEn: 'May 4, 2026', excerptEn: 'Digital transformation and smart automation are fundamentally reshaping the steel value chain.', sortOrder: 2 }, { category: 'market', img: '/news/photo-1504307651254-35680f356dfd.jpg', authorName: 'دکتر مریم رضایی', authorAvatar: '/news/photo-1438761681033-6461ffad8d80.jpg', titleFa: 'تأثیر نوسانات طلا بر سرمایه‌گذاری فولاد', dateFa: '۱۴ اردیبهشت ۱۴۰۵', excerptFa: 'تحلیل روند قیمت طلا و فلزات گران‌بها و اثر آن بر سرمایه‌گذاری در زنجیره فولاد.', titleEn: 'Gold Volatility Impact on Steel Investment', dateEn: 'May 4, 2026', excerptEn: 'Gold and precious-metal price trends and their effect on steel-chain investment.', sortOrder: 3 }, { category: 'geo', img: '/news/photo-1518770660439-4636190af475.jpg', authorName: 'دکتر علی موسوی', authorAvatar: '/news/photo-1472099645785-5658abf4ff4e.jpg', titleFa: 'ژئوپلیتیک و بازارهای صادراتی فولاد ایران', dateFa: '۱۴ اردیبهشت ۱۴۰۵', excerptFa: 'هندسه قدرت جهانی و اثر تحولات ژئوپلیتیک بر بازارهای صادراتی فولاد ایران.', titleEn: "Geopolitics and Iran's Steel Export Markets", dateEn: 'May 4, 2026', excerptEn: "Global power geometry and the impact of geopolitics on Iran's steel export markets.", sortOrder: 4 }, { category: 'energy', img: '/news/photo-1466611653911-95081537e5b7.jpg', authorName: 'مهندس نازنین حسینی', authorAvatar: '/news/photo-1544005313-94ddf0286df2.jpg', titleFa: 'گذار انرژی و فولاد سبز', dateFa: '۱۲ اردیبهشت ۱۴۰۵', excerptFa: 'هیدروژن سبز و برق تجدیدپذیر مسیر کربن‌زدایی صنعت فولاد را شتاب می‌دهند.', titleEn: 'Energy Transition & Green Steel', dateEn: 'May 2, 2026', excerptEn: 'Green hydrogen and renewable power are accelerating steel decarbonization.', sortOrder: 5 }, { category: 'tech', img: '/news/photo-1567789884554-0b844b597180.jpg', authorName: 'دکتر سارا احمدی', authorAvatar: '/news/photo-1494790108377-be9c29b29330.jpg', titleFa: 'اتوماسیون خطوط نورد', dateFa: '۱۰ اردیبهشت ۱۴۰۵', excerptFa: 'سیستم‌های کنترل هوشمند بهره‌وری خطوط نورد را تا ۲۲٪ افزایش داده‌اند.', titleEn: 'Rolling Line Automation', dateEn: 'Apr 30, 2026', excerptEn: 'Smart control systems have boosted rolling-line productivity by up to 22%.', sortOrder: 6 }, { category: 'commodity', img: '/news/photo-1570168007204-dfb528c6958f.jpg', authorName: 'مهندس رضا کریمی', authorAvatar: '/news/photo-1500648767791-00dcc994a43e.jpg', titleFa: 'زنجیره تأمین سنگ‌آهن', dateFa: '۸ اردیبهشت ۱۴۰۵', excerptFa: 'نوسانات عرضه سنگ‌آهن استرالیا و برزیل و پیامد آن برای تولیدکنندگان منطقه.', titleEn: 'Iron Ore Supply Chain', dateEn: 'Apr 28, 2026', excerptEn: 'Australian and Brazilian iron-ore supply swings and their regional fallout.', sortOrder: 7 }, { category: 'market', img: '/news/photo-1540575467063-178a50c2df87.jpg', authorName: 'دکتر مریم رضایی', authorAvatar: '/news/photo-1438761681033-6461ffad8d80.jpg', titleFa: 'تحلیل بازار جهانی فولاد', dateFa: '۶ اردیبهشت ۱۴۰۵', excerptFa: 'سیل صادرات فولاد چین و فشار قیمتی بر بازارهای هدف صادراتی ایران.', titleEn: 'Global Steel Market Analysis', dateEn: 'Apr 26, 2026', excerptEn: "China's steel export flood and price pressure on Iran's target export markets.", sortOrder: 8 }, ]; const FACTORY_REPORTS = [ { img: '/news/photo-1504307651254-35680f356dfd.jpg', scrollDir: 'left', tagFa: 'تولید و صادرات', titleFa: 'تحلیل عملکرد تولید و صادرات', dateFa: 'بهمن ۱۴۰۳', excerptFa: 'بررسی آمار تولید ماهانه، مقایسه با بودجه سالانه و روند صادرات فولاد تخت در بازارهای منطقه‌ای.', tagEn: 'Output & Exports', titleEn: 'Production & Export Performance', dateEn: 'Feb 2025', excerptEn: 'Monthly output vs. annual budget and the flat-steel export trend across regional markets.', sortOrder: 1 }, { img: '/news/photo-1581092160607-ee22731c9b4e.jpg', scrollDir: 'left', tagFa: 'بازار و قیمت', titleFa: 'وضعیت بازار و قیمت‌گذاری', dateFa: 'دی ۱۴۰۳', excerptFa: 'تحلیل نوسانات قیمت فولاد تخت در بازار داخلی و اثر نرخ ارز بر چشم‌انداز زمستان.', tagEn: 'Market & Price', titleEn: 'Market & Pricing Outlook', dateEn: 'Jan 2025', excerptEn: 'Flat-steel price swings in the domestic market and the FX effect on the winter outlook.', sortOrder: 2 }, { img: '/news/photo-1518770660439-4636190af475.jpg', scrollDir: 'left', tagFa: 'فناوری', titleFa: 'دیجیتال‌سازی خطوط تولید', dateFa: 'آذر ۱۴۰۳', excerptFa: 'گزارشی از پیاده‌سازی سامانه‌های کنترل هوشمند و اثر آن بر بهره‌وری خطوط نورد.', tagEn: 'Technology', titleEn: 'Production Line Digitalization', dateEn: 'Dec 2024', excerptEn: 'Rolling-out smart control systems and their impact on rolling-line productivity.', sortOrder: 3 }, { img: '/news/photo-1567789884554-0b844b597180.jpg', scrollDir: 'up', tagFa: 'نیروی انسانی', titleFa: 'تحلیل نیروی انسانی و بهره‌وری', dateFa: 'آبان ۱۴۰۳', excerptFa: 'شاخص‌های بهره‌وری نیروی کار، آموزش‌های ماهانه و آمار ایمنی شغلی.', tagEn: 'Workforce', titleEn: 'Workforce & Productivity', dateEn: 'Nov 2024', excerptEn: 'Labor productivity indicators, monthly training and occupational-safety statistics.', sortOrder: 4 }, { img: '/news/photo-1466611653911-95081537e5b7.jpg', scrollDir: 'up', tagFa: 'پایداری', titleFa: 'گزارش پایداری و محیط زیست', dateFa: 'آذر ۱۴۰۳', excerptFa: 'شاخص‌های زیست‌محیطی ماهانه؛ مصرف انرژی، کاهش انتشار کربن و بازچرخانی پساب صنعتی.', tagEn: 'Sustainability', titleEn: 'Sustainability & Environment', dateEn: 'Dec 2024', excerptEn: 'Monthly environmental metrics: energy use, carbon reduction and industrial water recycling.', sortOrder: 5 }, { img: '/news/photo-1570168007204-dfb528c6958f.jpg', scrollDir: 'up', tagFa: 'زنجیره تأمین', titleFa: 'تأمین مواد اولیه و لجستیک', dateFa: 'مهر ۱۴۰۳', excerptFa: 'وضعیت تأمین سنگ‌آهن و قراضه، موجودی انبار و تحلیل ریسک زنجیره تأمین.', tagEn: 'Supply Chain', titleEn: 'Raw Materials & Logistics', dateEn: 'Oct 2024', excerptEn: 'Iron-ore and scrap supply, inventory levels and supply-chain risk analysis.', sortOrder: 6 }, { img: '/news/photo-1611273426858-450d8e3c9fce.jpg', scrollDir: 'right', tagFa: 'سرمایه‌گذاری', titleFa: 'طرح‌های توسعه و سرمایه‌گذاری', dateFa: 'شهریور ۱۴۰۳', excerptFa: 'پیشرفت طرح‌های توسعه ظرفیت و تحلیل بازده سرمایه‌گذاری پروژه‌های جاری.', tagEn: 'Investment', titleEn: 'Expansion & Investment Plans', dateEn: 'Sep 2024', excerptEn: 'Capacity-expansion progress and ROI analysis of ongoing projects.', sortOrder: 7 }, { img: '/news/photo-1485827404703-89b55fcc595e.jpg', scrollDir: 'right', tagFa: 'کیفیت', titleFa: 'کنترل کیفیت با هوش مصنوعی', dateFa: 'مرداد ۱۴۰۳', excerptFa: 'کاربرد بینایی ماشین در تشخیص عیوب سطحی و کاهش نرخ ضایعات تولید.', tagEn: 'Quality', titleEn: 'AI-Driven Quality Control', dateEn: 'Aug 2024', excerptEn: 'Machine vision for surface-defect detection and lower production scrap rates.', sortOrder: 8 }, { img: '/news/photo-1613665813446-82a78c468a1d.jpg', scrollDir: 'right', tagFa: 'انرژی', titleFa: 'تحلیل مصرف انرژی و بهینه‌سازی', dateFa: 'تیر ۱۴۰۳', excerptFa: 'الگوی مصرف برق و گاز، فرصت‌های بهینه‌سازی و اثر آن بر بهای تمام‌شده.', tagEn: 'Energy', titleEn: 'Energy Use & Optimization', dateEn: 'Jul 2024', excerptEn: 'Electricity and gas usage patterns, optimization opportunities and cost impact.', sortOrder: 9 }, ]; const INTEGRATIONS = [ { name: 'London Metal Exchange', icon: 'exchange', accent: '#CD9E53', gridCol: 6, gridRow: 1, sortOrder: 1 }, { name: 'Shanghai Futures Exchange', icon: 'trending', accent: '#c0392b', gridCol: 4, gridRow: 2, sortOrder: 2 }, { name: 'S&P Global Platts', icon: 'chart', accent: '#2471a3', gridCol: 6, gridRow: 2, sortOrder: 3 }, { name: 'Reuters', icon: 'newspaper', accent: '#e67e22', gridCol: 3, gridRow: 3, sortOrder: 4 }, { name: 'Fastmarkets', icon: 'activity', accent: '#1e8449', gridCol: 5, gridRow: 3, sortOrder: 5 }, { name: 'World Steel Association', icon: 'building', accent: '#7d3c98', gridCol: 4, gridRow: 4, sortOrder: 6 }, { name: 'Mysteel', icon: 'database', accent: '#16a085', gridCol: 6, gridRow: 4, sortOrder: 7 }, { name: 'CME Group', icon: 'coins', accent: '#2980b9', gridCol: 5, gridRow: 5, sortOrder: 8 }, { name: 'Dalian Commodity Exchange', icon: 'globe', accent: '#d35400', gridCol: 3, gridRow: 5, sortOrder: 9 }, ]; // ── MAIN ────────────────────────────────────────────────────────────────────── async function main() { console.log('Logging in...'); await req('/api/auth/login', { method: 'POST', body: { username: USERNAME, password: PASSWORD } }); console.log('OK. Seeding...\n'); await seedIfEmpty('Events', '/api/events?limit=1', EVENTS, i => req('/api/events', { method: 'POST', body: i })); await seedIfEmpty('Team', '/api/team?limit=1', TEAM, i => req('/api/team', { method: 'POST', body: i })); await seedIfEmpty('Plans', '/api/plans?limit=1', PLANS, i => req('/api/plans', { method: 'POST', body: i })); await seedIfEmpty('Banners', '/api/banners?limit=1', BANNERS, i => req('/api/banners', { method: 'POST', body: i })); await seedIfEmpty('Vision Items', '/api/vision-items?limit=1', VISION_ITEMS, i => req('/api/vision-items', { method: 'POST', body: i })); await seedIfEmpty('Advisory Board', '/api/advisory-board?limit=1', ADVISORY_BOARD, i => req('/api/advisory-board', { method: 'POST', body: i })); await seedIfEmpty('Radar Items', '/api/radar?limit=1', RADAR_ITEMS, i => req('/api/radar', { method: 'POST', body: i })); await seedIfEmpty('Factory Reports','/api/factory-reports?limit=1', FACTORY_REPORTS,i => req('/api/factory-reports', { method: 'POST', body: i })); await seedIfEmpty('Integrations', '/api/integrations?limit=1', INTEGRATIONS, i => req('/api/integrations', { method: 'POST', body: i })); // Videos + Podcasts live in /api/articles — check by type const existingVideos = await req('/api/articles?type=video&limit=1'); if (Array.isArray(existingVideos) && existingVideos.length > 0) { console.log(` SKIP Videos (records exist)`); } else { console.log(` SEED Videos (${VIDEOS.length} items)...`); for (const v of VIDEOS) { try { await req('/api/articles', { method: 'POST', body: v }); } catch (e) { console.warn(' WARN Video:', e.message); } } console.log(' OK Videos'); } const existingPodcasts = await req('/api/articles?type=podcast&limit=1'); if (Array.isArray(existingPodcasts) && existingPodcasts.length > 0) { console.log(` SKIP Podcasts (records exist)`); } else { console.log(` SEED Podcasts (${PODCASTS.length} items)...`); for (const p of PODCASTS) { try { await req('/api/articles', { method: 'POST', body: p }); } catch (e) { console.warn(' WARN Podcast:', e.message); } } console.log(' OK Podcasts'); } console.log('\nDone. Panel DB seeded.'); } main().catch(err => { console.error('FATAL:', err.message); process.exit(1); });