// Seed mock «در یک نگاه» items (radar_items) across the 5 categories. // Does NOT touch «رادار آینده» (radarFuture / radar_pages). // Run from panel/: node scripts/seed-glance-mock.mjs import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import pg from 'pg'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); // minimal .env loader (panel/.env) const envPath = path.join(__dirname, '..', '.env'); if (fs.existsSync(envPath)) { for (const line of fs.readFileSync(envPath, 'utf8').split(/\r?\n/)) { const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/); if (m && !process.env[m[1]]) process.env[m[1]] = m[2].replace(/^["']|["']$/g, ''); } } if (!process.env.DATABASE_URL) { console.error('DATABASE_URL not set'); process.exit(1); } const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL, ssl: process.env.DATABASE_SSL === 'disable' ? false : { rejectUnauthorized: false }, }); const IMGS = [ '/news/photo-1611974789855-9c2a0a7236a3.jpg', '/news/photo-1518770660439-4636190af475.jpg', '/news/photo-1581092160607-ee22731c9b4e.jpg', '/news/photo-1466611653911-95081537e5b7.jpg', '/news/photo-1504307651254-35680f356dfd.jpg', ]; const DATES_FA = ['فروردین ۱۴۰۵', 'اردیبهشت ۱۴۰۵', 'خرداد ۱۴۰۵', 'تیر ۱۴۰۵']; const DATES_EN = ['Mar 2026', 'Apr 2026', 'May 2026', 'Jun 2026']; const AUTHOR = 'تحریریه اندیشکده فولاد آینده'; // 4 topics per category: [titleFa, excerptFa, bodyFa(2 paras), analysisFa, titleEn, excerptEn, bodyEn, analysisEn] const DATA = { market: [ ['روند قیمت جهانی فولاد در نیمه دوم ۱۴۰۵', 'بررسی عوامل کلان مؤثر بر قیمت فولاد در بازارهای جهانی.', ['قیمت جهانی فولاد در ماه‌های اخیر تحت تأثیر تقاضای چین، سیاست‌های پولی بانک‌های مرکزی و نوسان هزینه انرژی قرار گرفته است.', 'تحلیل‌گران معتقدند تثبیت تقاضای ساخت‌وساز و کاهش نرخ بهره می‌تواند کف قیمتی جدیدی برای بازار رقم بزند.'], 'برای فولادسازان ایرانی، پایش هفتگی شاخص‌های قیمت و پوشش ریسک ارزی، کلید حفظ حاشیه سود در این دوره نوسانی است.', 'Global Steel Price Trend in H2 2026', 'Macro drivers shaping steel prices in world markets.', ['Global steel prices have been driven by Chinese demand, central-bank policy and volatile energy costs.'], 'Iranian mills should hedge FX exposure and track weekly price indices to protect margins.'], ['تأثیر تورم جهانی بر تقاضای فولاد', 'چگونه تورم و سیاست انقباضی، مصرف فولاد را بازتعریف می‌کند.', ['تورم پایدار در اقتصادهای بزرگ، هزینه تأمین مالی پروژه‌های زیرساختی را افزایش داده و بخشی از تقاضای فولاد را به تعویق انداخته است.', 'با این حال، طرح‌های توسعه زیرساخت در آسیا و خاورمیانه همچنان موتور محرک تقاضا باقی مانده‌اند.'], 'تمرکز بر بازارهای منطقه‌ای با تقاضای ساختاری بالا، ریسک کاهش مصرف ناشی از تورم را تا حد زیادی خنثی می‌کند.', 'Global Inflation and Steel Demand', 'How inflation reshapes steel consumption.', ['Persistent inflation has raised infrastructure financing costs and deferred part of steel demand.'], 'Focusing on regional markets with structural demand offsets inflation-driven consumption risk.'], ['چشم‌انداز بازار سنگ‌آهن و قراضه', 'تعادل عرضه و تقاضا در زنجیره مواد اولیه فولاد.', ['بازار سنگ‌آهن با افزایش عرضه استرالیا و برزیل و همزمان رشد تقاضای کوره‌های قوس الکتریکی برای قراضه، وارد فاز جدیدی شده است.', 'قیمت قراضه به‌عنوان شاخص پیشرو، نقش مهمی در پیش‌بینی مسیر قیمت محصولات نهایی دارد.'], 'تنوع‌بخشی به منابع تأمین سنگ‌آهن و توسعه بازار قراضه داخلی، مزیت رقابتی پایداری ایجاد می‌کند.', 'Iron Ore and Scrap Market Outlook', 'Supply-demand balance in steel raw materials.', ['Iron ore supply from Australia and Brazil rose while EAF scrap demand climbed.'], 'Diversifying ore sources and growing the domestic scrap market builds durable advantage.'], ['نوسانات نرخ ارز و صادرات فولاد ایران', 'اثر بی‌ثباتی ارزی بر رقابت‌پذیری صادرات.', ['نوسان نرخ ارز هم فرصت و هم تهدید برای صادرکنندگان فولاد است؛ تضعیف پول ملی رقابت قیمتی را بهبود می‌دهد اما هزینه واردات تجهیزات را بالا می‌برد.', 'مدیریت ریسک ارزی از طریق ابزارهای پوشش و قراردادهای بلندمدت اهمیت یافته است.'], 'صادرکنندگانی که سبد ارزی متنوع و قراردادهای ارزی پوشش‌دار دارند، در برابر شوک‌های نرخ ارز تاب‌آورترند.', 'FX Volatility and Iran Steel Exports', 'How currency swings affect export competitiveness.', ['Currency volatility is both an opportunity and a threat for steel exporters.'], 'Exporters with diversified currency baskets and hedged contracts are more resilient.'], ], tech: [ ['هوش مصنوعی در بهینه‌سازی کوره‌های قوس الکتریکی', 'کاهش مصرف انرژی با مدل‌های یادگیری ماشین.', ['الگوریتم‌های یادگیری ماشین با تحلیل هزاران پارامتر فرآیندی، نقطه بهینه مصرف انرژی و افزودنی‌ها را در کوره‌های قوس الکتریکی پیش‌بینی می‌کنند.', 'کارخانه‌های پیشرو تا ۱۲ درصد کاهش مصرف برق و بهبود کیفیت مذاب را گزارش کرده‌اند.'], 'سرمایه‌گذاری در زیرساخت داده و حسگرها پیش‌نیاز بهره‌برداری واقعی از هوش مصنوعی در فولادسازی است.', 'AI for Electric Arc Furnace Optimization', 'Cutting energy use with machine learning.', ['ML models predict the optimal energy and additive set-point in EAFs.'], 'Investing in data infrastructure and sensors is a prerequisite for real AI gains.'], ['دوقلوی دیجیتال در خطوط نورد', 'شبیه‌سازی بی‌درنگ برای کنترل کیفیت.', ['دوقلوی دیجیتال نسخه‌ای مجازی از خط نورد می‌سازد که امکان شبیه‌سازی سناریوها و پیش‌بینی عیوب پیش از وقوع را فراهم می‌کند.', 'این فناوری زمان توقف برنامه‌ریزی‌نشده را به‌طور محسوس کاهش می‌دهد.'], 'استقرار تدریجی دوقلوی دیجیتال از واحدهای پرریسک، مسیر کم‌هزینه‌تری برای تحول دیجیتال است.', 'Digital Twins in Rolling Mills', 'Real-time simulation for quality control.', ['A digital twin mirrors the rolling line to simulate scenarios and predict defects.'], 'Rolling out digital twins from high-risk units first is the lower-cost path.'], ['چاپ سه‌بعدی فلزی و آینده تولید قطعات', 'ساخت افزایشی در صنعت فولاد.', ['چاپ سه‌بعدی فلزی امکان تولید قطعات یدکی پیچیده و کم‌تیراژ را بدون نیاز به قالب فراهم می‌کند و زنجیره تأمین را کوتاه می‌سازد.', 'کاربرد آن در ساخت قطعات تعمیراتی کوره‌ها رو به گسترش است.'], 'ساخت افزایشی برای قطعات بحرانی و کمیاب، ریسک توقف تولید ناشی از کمبود قطعه را کاهش می‌دهد.', 'Metal 3D Printing and the Future of Parts', 'Additive manufacturing in steel.', ['Metal 3D printing enables complex, low-volume spare parts without tooling.'], 'Additive manufacturing for critical, scarce parts reduces downtime risk.'], ['اینترنت اشیای صنعتی در فولادسازی', 'پایش بی‌درنگ تجهیزات و نگهداری پیش‌بینانه.', ['با اتصال هزاران حسگر به پلتفرم‌های ابری، وضعیت سلامت تجهیزات به‌صورت لحظه‌ای پایش و خرابی‌ها پیش‌بینی می‌شود.', 'نگهداری پیش‌بینانه نرخ خرابی ناگهانی را به‌طور چشمگیری کاهش داده است.'], 'یکپارچگی داده میان واحدها، شرط تبدیل داده‌های حسگر به تصمیم‌های عملیاتی ارزشمند است.', 'Industrial IoT in Steelmaking', 'Real-time monitoring and predictive maintenance.', ['Thousands of cloud-connected sensors monitor equipment health in real time.'], 'Cross-unit data integration turns sensor data into valuable operational decisions.'], ], commodity: [ ['زنجیره تأمین عناصر نادر خاکی', 'وابستگی صنعت به مواد معدنی حیاتی.', ['عناصر نادر خاکی و فلزات حیاتی، نقش راهبردی در فناوری‌های نوین و آلیاژهای پیشرفته فولاد دارند و تمرکز عرضه آن‌ها در چند کشور، ریسک ژئواکونومیک ایجاد می‌کند.', 'توسعه ذخایر داخلی و بازیافت، اهرم کاهش این وابستگی است.'], 'نقشه‌برداری از ریسک تأمین مواد معدنی حیاتی باید بخشی از برنامه‌ریزی راهبردی صنعت باشد.', 'Rare Earth Supply Chain', 'Industry dependence on critical minerals.', ['Rare earths play a strategic role in advanced steel alloys and new tech.'], 'Mapping critical-mineral supply risk must be part of strategic planning.'], ['امنیت تأمین سنگ‌آهن داخلی', 'پایداری زنجیره مواد اولیه فولاد کشور.', ['با رشد ظرفیت فولادسازی، تقاضای سنگ‌آهن از عرضه داخلی پیشی گرفته و مدیریت ذخایر و کنسانتره اهمیت راهبردی یافته است.', 'سرمایه‌گذاری در اکتشاف و فرآوری، تضمین‌کننده تأمین بلندمدت است.'], 'تعادل میان صادرات سنگ‌آهن خام و تأمین خوراک داخلی، تصمیمی کلیدی برای سیاست‌گذار است.', 'Domestic Iron Ore Security', 'Stability of the national raw-material chain.', ['Steelmaking growth has outpaced domestic iron ore supply.'], 'Balancing raw ore exports with domestic feed is a key policy decision.'], ['بازار جهانی زغال‌سنگ کک‌شو', 'نقش زغال کک در مسیر تولید فولاد.', ['زغال‌سنگ کک‌شو نهاده کلیدی کوره‌بلند است و نوسان قیمت و محدودیت عرضه آن مستقیماً بر بهای تمام‌شده فولاد اثر می‌گذارد.', 'گذار به فناوری‌های کم‌کربن، تقاضای آتی این ماده را تحت‌تأثیر قرار می‌دهد.'], 'تنوع منابع تأمین زغال کک و قراردادهای بلندمدت، نوسان بهای تمام‌شده را مهار می‌کند.', 'Global Coking Coal Market', 'Coke’s role in the steel route.', ['Coking coal is a key blast-furnace input; its price swings hit steel costs.'], 'Diversified coking-coal sources and long-term contracts curb cost volatility.'], ['تاب‌آوری زنجیره تأمین مواد اولیه', 'مدیریت ریسک اختلال در تأمین.', ['رویدادهای اقلیمی، تنش‌های تجاری و اعتصابات می‌توانند زنجیره تأمین مواد اولیه را مختل کنند؛ از این‌رو تاب‌آوری به اولویت راهبردی بدل شده است.', 'موجودی ایمنی و چندمنبعی‌سازی، دو ابزار اصلی کاهش این ریسک‌اند.'], 'طراحی زنجیره تأمین چندمنبعی با موجودی ایمنی هوشمند، تداوم تولید را در شوک‌ها تضمین می‌کند.', 'Raw-Material Supply Resilience', 'Managing disruption risk.', ['Climate events, trade tensions and strikes can disrupt raw-material chains.'], 'Multi-sourcing with smart safety stock ensures production continuity in shocks.'], ], geo: [ ['ژئوپلیتیک تعرفه‌های فولاد و امنیت اقتصادی', 'بازآرایی تجارت جهانی فولاد در سایه تعرفه‌ها.', ['موج جدید تعرفه‌ها و اقدامات حمایتی، مسیرهای صادراتی فولاد را بازآرایی کرده و امنیت اقتصادی تولیدکنندگان را به مسئله‌ای راهبردی تبدیل کرده است.', 'کشورهای صادرکننده ناچار به یافتن بازارهای جایگزین و ائتلاف‌های تجاری جدیدند.'], 'برای ایران، تمرکز بر بازارهای جنوب جهانی و کریدورهای منطقه‌ای، سپر ژئوپلیتیک تعرفه‌هاست.', 'Geopolitics of Steel Tariffs', 'Reshaping global trade under tariffs.', ['A new wave of tariffs is realigning steel export routes.'], 'For Iran, focusing on the Global South and regional corridors is the tariff shield.'], ['تحریم‌ها و مسیرهای جایگزین صادرات', 'راهبردهای دور زدن محدودیت‌های تجاری.', ['تحریم‌ها هزینه و پیچیدگی صادرات را افزایش می‌دهند، اما توسعه مسیرهای جایگزین و شرکای منطقه‌ای، فضای تنفس ایجاد می‌کند.', 'لجستیک منعطف و تنوع مقصد، کلید تداوم صادرات است.'], 'سرمایه‌گذاری در زیرساخت لجستیک منطقه‌ای، اثر تحریم بر جریان صادرات را کاهش می‌دهد.', 'Sanctions and Alternative Export Routes', 'Strategies around trade restrictions.', ['Sanctions raise export cost and complexity; alternative routes create breathing room.'], 'Investing in regional logistics infrastructure dampens sanctions’ impact on exports.'], ['رقابت چین و آمریکا در بازار فولاد', 'اثر رقابت دو ابرقدرت بر بازارهای هدف.', ['رقابت راهبردی چین و آمریکا بر زنجیره ارزش فولاد، از فناوری تا تجارت، سایه افکنده و بازارهای ثالث را به میدان رقابت تبدیل کرده است.', 'مازاد عرضه چین فشار قیمتی مستمری بر بازارهای آسیا و خاورمیانه وارد می‌کند.'], 'پایش سیاست‌های تجاری دو ابرقدرت، پیش‌نیاز تصمیم‌گیری صادراتی هوشمندانه است.', 'US-China Rivalry in Steel', 'Superpower competition in target markets.', ['US-China rivalry shadows the steel value chain from tech to trade.'], 'Monitoring both powers’ trade policy is a prerequisite for smart export decisions.'], ['کریدورهای ترانزیتی و امنیت تجارت', 'نقش کریدورهای منطقه‌ای در پایداری صادرات.', ['کریدورهای ترانزیتی شمال-جنوب و شرق-غرب، فرصت کاهش هزینه و زمان حمل فولاد به بازارهای منطقه‌ای را فراهم می‌کنند.', 'امنیت و پایداری این مسیرها مستقیماً بر رقابت‌پذیری صادرات اثر می‌گذارد.'], 'مشارکت فعال در توسعه کریدورهای منطقه‌ای، مزیت لجستیکی پایدار ایجاد می‌کند.', 'Transit Corridors and Trade Security', 'Regional corridors for export stability.', ['North-South and East-West corridors cut steel shipping cost and time.'], 'Active participation in regional corridors builds durable logistics advantage.'], ], energy: [ ['توافق‌نامه‌های تجاری منطقه‌ای و فولاد', 'فرصت‌های ناشی از پیمان‌های تجاری.', ['پیمان‌های تجاری منطقه‌ای با کاهش تعرفه و تسهیل گمرکی، دسترسی فولاد ایران به بازارهای همسایه را آسان‌تر می‌کنند.', 'بهره‌گیری از این ظرفیت نیازمند انطباق با استانداردها و گواهی‌های مقصد است.'], 'تطبیق محصولات با استانداردهای بازار هدف، پیش‌شرط بهره‌برداری از مزایای پیمان‌های تجاری است.', 'Regional Trade Pacts and Steel', 'Opportunities from trade agreements.', ['Regional trade pacts ease Iranian steel access to neighboring markets.'], 'Meeting destination standards is a precondition for reaping pact benefits.'], ['فرصت‌های صادرات به آفریقا و آسیای جنوب شرقی', 'بازارهای نوظهور با تقاضای رو به رشد.', ['رشد جمعیت و شهرنشینی در آفریقا و آسیای جنوب شرقی، تقاضای پایداری برای مقاطع ساختمانی فولاد ایجاد کرده است.', 'این بازارها کمتر در معرض فشارهای ژئوپلیتیک غرب قرار دارند.'], 'حضور زودهنگام و ساخت شبکه توزیع محلی، سهم بازار بلندمدت در این مقاصد را تثبیت می‌کند.', 'Export Opportunities in Africa and SE Asia', 'Emerging markets with rising demand.', ['Population growth and urbanization drive steady steel demand in Africa and SE Asia.'], 'Early entry and local distribution networks lock in long-term market share.'], ['تجارت مرزی و بازارهای همسایه', 'ظرفیت بازارهای کم‌فاصله برای صادرات.', ['بازارهای همسایه با هزینه حمل پایین و نیاز ساختاری به فولاد، مقصد طبیعی صادرات کوتاه‌زنجیره‌اند.', 'تسهیل تجارت مرزی و بازارچه‌ها، جریان صادرات خرد را تقویت می‌کند.'], 'تمرکز بر بازارهای همسایه با لجستیک کوتاه، حاشیه سود صادرات را به‌دلیل هزینه حمل پایین بهبود می‌دهد.', 'Border Trade and Neighboring Markets', 'Short-haul export potential.', ['Neighboring markets with low freight cost are natural short-chain export targets.'], 'Focusing on nearby markets improves export margins via low freight cost.'], ['کسب‌وکارهای صادرات‌محورِ فولاد', 'مدل‌های نوین تجارت بین‌المللی.', ['شرکت‌های صادرات‌محور با تخصصی‌سازی در بازارهای هدف و خدمات پس از فروش، ارزش افزوده بالاتری نسبت به صادرات خام ایجاد می‌کنند.', 'برندسازی و کیفیت پایدار، مزیت رقابتی این مدل است.'], 'گذار از صادرات خام به مدل صادرات‌محورِ برنددار، تاب‌آوری درآمد ارزی را افزایش می‌دهد.', 'Export-Oriented Steel Businesses', 'New international trade models.', ['Export-focused firms add more value than raw exports via specialization and after-sales.'], 'Shifting from raw exports to branded export models boosts FX revenue resilience.'], ], }; const rows = []; let order = 0; const cats = Object.keys(DATA); cats.forEach((cat, ci) => { DATA[cat].forEach((t, i) => { rows.push({ id: `glance-${cat}-${i + 1}`, category: cat, img: IMGS[(ci + i) % IMGS.length], author_name: AUTHOR, author_avatar: '', title_fa: t[0], date_fa: DATES_FA[i % DATES_FA.length], excerpt_fa: t[1], body_fa: t[2].join('\n\n'), analysis_fa: t[3], title_en: t[4], date_en: DATES_EN[i % DATES_EN.length], excerpt_en: t[5], body_en: t[6].join('\n\n'), analysis_en: t[7], sort_order: order++, }); }); }); const SQL = ` INSERT INTO radar_items (id, category, img, author_name, author_avatar, title_fa, date_fa, excerpt_fa, body_fa, analysis_fa, title_en, date_en, excerpt_en, body_en, analysis_en, sort_order) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16) ON CONFLICT (id) DO UPDATE SET category=EXCLUDED.category, img=EXCLUDED.img, author_name=EXCLUDED.author_name, title_fa=EXCLUDED.title_fa, date_fa=EXCLUDED.date_fa, excerpt_fa=EXCLUDED.excerpt_fa, body_fa=EXCLUDED.body_fa, analysis_fa=EXCLUDED.analysis_fa, title_en=EXCLUDED.title_en, date_en=EXCLUDED.date_en, excerpt_en=EXCLUDED.excerpt_en, body_en=EXCLUDED.body_en, analysis_en=EXCLUDED.analysis_en, sort_order=EXCLUDED.sort_order, updated_at=now(); `; const main = async () => { let n = 0; for (const r of rows) { await pool.query(SQL, [ r.id, r.category, r.img, r.author_name, r.author_avatar, r.title_fa, r.date_fa, r.excerpt_fa, r.body_fa, r.analysis_fa, r.title_en, r.date_en, r.excerpt_en, r.body_en, r.analysis_en, r.sort_order, ]); n++; } const counts = await pool.query( "SELECT category, count(*)::int AS c FROM radar_items GROUP BY category ORDER BY category" ); console.log(`seeded ${n} mock «در یک نگاه» items.`); console.table(counts.rows); await pool.end(); }; main().catch((e) => { console.error(e); process.exit(1); });