203 lines
22 KiB
JavaScript
203 lines
22 KiB
JavaScript
// 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); });
|