387 lines
25 KiB
TypeScript
387 lines
25 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
||
import * as fs from 'fs';
|
||
import * as path from 'path';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
function slugify(text: string): string {
|
||
return text
|
||
.toLowerCase()
|
||
.replace(/\s+/g, '-')
|
||
.replace(/[^a-z0-9\u0600-\u06FF\-]/g, '')
|
||
.replace(/-+/g, '-')
|
||
.replace(/^-|-$/g, '');
|
||
}
|
||
|
||
function determineSuitableFor(name: string, description: string): string {
|
||
const text = (name + ' ' + description).toLowerCase();
|
||
const hasCat = text.includes('گربه') || text.includes('katzen') || text.includes('cat');
|
||
const hasDog = text.includes('سگ') || text.includes('hund') || text.includes('توله') || text.includes('dog');
|
||
if (hasCat && hasDog) return 'هر دو';
|
||
if (hasCat) return 'گربه';
|
||
if (hasDog) return 'سگ';
|
||
return 'هر دو';
|
||
}
|
||
|
||
function parseSize(size: string): { unit: string; packageSize: number } {
|
||
const mlMatch = size.match(/([\d.]+)\s*ml/i);
|
||
if (mlMatch) return { unit: 'ml', packageSize: parseFloat(mlMatch[1]) };
|
||
const gMatch = size.match(/([\d.]+)\s*g/i);
|
||
if (gMatch) return { unit: 'g', packageSize: parseFloat(gMatch[1]) };
|
||
const tabMatch = size.match(/([\d.]+)\s*(tablet|tab)/i);
|
||
if (tabMatch) return { unit: 'tablet', packageSize: parseFloat(tabMatch[1]) };
|
||
return { unit: 'g', packageSize: 100 };
|
||
}
|
||
|
||
function getProductImageUrl(baseSlug: string): string {
|
||
const images: Record<string, string> = {
|
||
'canina-ballaststoff-mix': 'https://www.canina.de/media/4c/32/38/1715077271/Ballaststoff-Mix-140108-V1-Canino-100g_600x600.webp',
|
||
'canina-canhydrox-gag': 'https://www.canina.de/media/83/86/e1/123000_123005_Canhydrox_GAG_Canina-Pharma_1280x1280.png',
|
||
'canina-eierschalenpulver': 'https://www.canina.de/media/fb/d3/18/120208_Eierschalenpulver_Canina-Pharma_1280x1280.png',
|
||
'canina-flexan': 'https://www.canina.de/media/01/be/93/710003_Flexan_Canina-Pharma_1280x1280.png',
|
||
'canina-herz-vital': 'https://www.canina.de/media/b9/8b/4c/112036_Herz_Vital_Canina-Pharma_1280x1280.png',
|
||
'canina-immun-booster-paste': 'https://www.canina.de/media/8c/fb/8e/311000_Canino_Immun_Booster_Paste_Abwehrkraefte_1280x1280.png',
|
||
'canina-katzenmilch': 'https://www.canina.de/media/6b/48/81/731000_Canino_Lachsoel_Lachs_Oel_1280x1280.png',
|
||
'canina-lachs-l': 'https://www.canina.de/media/6b/48/81/731000_Canino_Lachsoel_Lachs_Oel_1280x1280.png',
|
||
'canina-lachs-ol': 'https://www.canina.de/media/6b/48/81/731000_Canino_Lachsoel_Lachs_Oel_1280x1280.png',
|
||
'canina-marine-lmischung-premium': 'https://www.canina.de/media/ad/28/71/153008_Marine_Oelmischung_Premium_Canina-Pharma_1280x1280.png',
|
||
'canina-moortrnke': 'https://www.canina.de/media/9d/b2/87/112708_Moortraenke_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-arthro-tabletten': 'https://www.canina.de/media/90/a6/50/723003_PETVITAL_Arthro_Tabletten_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-bio-aktivator': 'https://www.canina.de/media/c9/2e/0f/712007_PETVITAL_Bio_Aktivator_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-biotin-tabs': 'https://www.canina.de/media/e1/9b/6c/702008_PETVITAL_Biotin_Tabs_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-energy-gel': 'https://www.canina.de/media/7f/0f/06/712106_PETVITAL_Energy_Gel_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-mineral-tabs': 'https://www.canina.de/media/70/4e/f2/723102_PETVITAL_Mineral_Tabs_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-gag': 'https://www.canina.de/media/58/05/92/723201_723300_PETVITAL_GAG_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-vitamin-tabs': 'https://www.canina.de/media/2c/80/7e/712205_PETVITAL_Vitamin_Tabs_Canina-Pharma_1280x1280.png',
|
||
'canina-rinderblut-pulver': 'https://www.canina.de/media/14/d0/0d/792016_791514_Rinderblut_Pulver_Canina-Pharma_1280x1280.png',
|
||
'canina-rinderfett-pulver': 'https://www.canina.de/media/9a/31/59/131235_Rinderfett_Pulver_Canina-Pharma_1280x1280.png',
|
||
'canina-schwarz-kmmel-samen': 'https://www.canina.de/media/a9/c8/aa/131105_Schwarzkuemmelsamen_Canina-Pharma_1280x1280.png',
|
||
'canina-seealgen-bio-seealgenmehl': 'https://www.canina.de/media/e4/c4/b2/130504_130511_130412_Seealgen_Bio-Seealgenmehl_Canina-Pharma_1280x1280.png',
|
||
'canina-taurin-fr-katzen': 'https://www.canina.de/media/c6/aa/62/229505_Taurin_fuer_Katzen_Canina-Pharma_1280x1280.png',
|
||
'canina-velox-gelenkenergie': 'https://www.canina.de/media/1a/0c/33/701902_Velox_Gelenkenergie_Canina-Pharma_1280x1280.png',
|
||
'canina-welpenbrei': 'https://www.canina.de/media/98/95/43/130603_Welpenbrei_Canina-Pharma_1280x1280.png',
|
||
'canina-welpenmilch': 'https://www.canina.de/media/2c/e0/75/130702_Welpenmilch_Canina-Pharma_1280x1280.png',
|
||
'canina-petvital-bio-insect-shocker': 'https://www.canina.de/media/76/a4/1c/741304_741311_PETVITAL_Bio_Insect_Shocker_Canina-Pharma_1280x1280.png',
|
||
'canina-mikrosilber-zahngel': 'https://www.canina.de/media/9d/5e/54/131454_Mikrosilber_Zahngel_Canina-Pharma_1280x1280.png',
|
||
'canina-novagard-green-augenpflege': 'https://www.canina.de/media/6b/48/81/731000_Canino_Lachsoel_Lachs_Oel_1280x1280.png',
|
||
'canina-novagard-green-pfotenpflege': 'https://www.canina.de/media/6b/48/81/731000_Canino_Lachsoel_Lachs_Oel_1280x1280.png',
|
||
};
|
||
return images[baseSlug] || `/products/${baseSlug}.png`;
|
||
}
|
||
|
||
async function findOrCreateCategory(slug: string): Promise<{ id: string; slug: string }> {
|
||
const CATEGORY_NAMES: Record<string, string> = {
|
||
'joints': 'مفاصل و استخوان',
|
||
'immune': 'تقویت سیستم ایمنی و گوارش',
|
||
'energy': 'ویتامینها و انرژیبخشها',
|
||
'special-care': 'مراقبتهای ویژه (پوست، دندان و چشم)',
|
||
'general': 'تقویت عمومی',
|
||
'nutrition': 'تغذیه تخصصی',
|
||
'supplements': 'مکملهای غذایی و درمانی',
|
||
};
|
||
const name = CATEGORY_NAMES[slug] || slug;
|
||
return await prisma.category.upsert({
|
||
where: { slug },
|
||
update: { name },
|
||
create: { slug, name, description: name },
|
||
});
|
||
}
|
||
|
||
const PRODUCT_SYMPTOMS_MAP: Record<string, string[]> = {
|
||
'canina-ballaststoff-mix': ["اسهال", "یبوست", "اسهال مزمن", "تنظیم فلور روده"],
|
||
'canina-canhydrox-gag': ["درد مفاصل", "سختی در بلند شدن", "لنگیدن", "رشد سریع تولهسگ", "تقویت رباط و تاندون"],
|
||
'canina-eierschalenpulver': ["کمبود کلسیم", "رژیم خام گوشتی", "سلامت دندانها"],
|
||
'canina-flexan': ["درد مفاصل", "سختی در بلند شدن", "لنگیدن", "تخریب غضروف"],
|
||
'canina-herz-vital': ["نارسایی قلبی", "بیحالی", "کاهش انرژی"],
|
||
'canina-immun-booster-paste': ["ضعف بعد از بیماری", "اسهال", "ضعف تولهسگ", "کاهش ایمنی"],
|
||
'canina-katzenmilch': ["تغذیه بچه گربه", "بیمادری بچه گربه"],
|
||
'canina-lachs-ol': ["خشکی پوست", "ریزش مو", "خارش", "التهاب پوست"],
|
||
'canina-marine-lmischung-premium': ["خشکی پوست", "ریزش مو", "التهاب"],
|
||
'canina-moortrnke': ["اسهال", "اشتهای کم", "مسمومیت گوارشی"],
|
||
'canina-petvital-arthro-tabletten': ["درد مفاصل", "سختی در بلند شدن", "لنگیدن"],
|
||
'canina-petvital-bio-aktivator': ["کاهش ایمنی", "خستگی", "دوران نقاهت"],
|
||
'canina-petvital-biotin-tabs': ["ریزش مو", "خشکی پوست", "شکنندگی ناخن"],
|
||
'canina-petvital-energy-gel': ["بیاشتهایی", "کاهش وزن", "کمبود انرژی"],
|
||
'canina-petvital-mineral-tabs': ["کمبود مواد معدنی", "ضعف استخوان"],
|
||
'canina-petvital-gag': ["سختی در بلند شدن", "لنگیدن"],
|
||
'canina-petvital-vitamin-tabs': ["کمبود ویتامین", "کاهش انرژی"],
|
||
'canina-rinderblut-pulver': ["کمخونی", "بیاشتهایی", "دوران رشد"],
|
||
'canina-rinderfett-pulver': ["کمبود وزن", "اشتهای کم"],
|
||
'canina-schwarz-kmmel-samen': ["انگل روده", "ضعف ایمنی"],
|
||
'canina-seealgen-bio-seealgenmehl': ["کاهش پیگمنت مو", "کمبود تیروئید"],
|
||
'canina-taurin-fr-katzen': ["مشکل بینایی گربه", "نارسایی قلبی گربه"],
|
||
'canina-velox-gelenkenergie': ["درد مفاصل", "لنگیدن"],
|
||
'canina-welpenbrei': ["تغذیه تولهسگ", "از شیر گرفتن تولهسگ"],
|
||
'canina-welpenmilch': ["تغذیه تولهسگ", "بیمادری تولهسگ"],
|
||
'canina-petvital-bio-insect-shocker': ["کک و کنه", "انگلهای پوستی"],
|
||
'canina-mikrosilber-zahngel': ["جرم دندان", "بوی بد دهان", "التهاب لثه"],
|
||
'canina-novagard-green-augenpflege': ["ترشحات چشم", "التهاب چشم", "کثیفی چشم"],
|
||
'canina-novagard-green-pfotenpflege': ["ترک پنجه", "خشکی پنجه", "زخم پنجه"],
|
||
};
|
||
|
||
const PRODUCT_TAGLINES_MAP: Record<string, string> = {
|
||
'canina-ballaststoff-mix': "مکمل فیبر پریبیوتیک جهت تنظیم گوارش و پایداری فلور روده",
|
||
'canina-canhydrox-gag': "فرمولاسیون ویژه دامپزشکی برای پایداری بافتهای همبند، غضروف و استخوانها",
|
||
'canina-eierschalenpulver': "کلسیم ارگانیک صد در صد طبیعی مناسب رژیمهای غذایی خام (BARF)",
|
||
'canina-flexan': "پپتیدهای کلاژن زیستفعال برای بهینهسازی دامنه حرکتی و بازسازی مفصلی",
|
||
'canina-herz-vital': "تقویت عملکرد فیزیولوژیک عضله قلب و افزایش نشاط حیوان",
|
||
'canina-immun-booster-paste': "تامین فوری ایمونوگلوبولینهای آغوز و تثبیت فلور روده در زمان نقاهت",
|
||
'canina-katzenmilch': "شیر خشک جایگزین بچه گربه حاوی تورین و فاقد لاکتوز مزاحم",
|
||
'canina-lachs-ol': "اسیدهای چرب ضروری امگا ۳ برای درخشش پوشش مویی و سلامت پوست",
|
||
'canina-marine-lmischung-premium': "ترکیب روغنهای ممتاز دریایی غنی از EPA و DHA جهت کاهش التهابات پوستی",
|
||
'canina-moortrnke': "عصاره پیت طبیعی برای جذب بیولوژیکی سموم و بهبود ترشحات گوارشی",
|
||
'canina-petvital-arthro-tabletten': "فرمول گیاهی-معدنی برای کاهش دردهای حاد مفصلی و تسهیل در بلند شدن",
|
||
'canina-petvital-bio-aktivator': "آمینو اسیدها و آهن فعال جهت بازسازی قوای جسمی و بهبود اشتها",
|
||
'canina-petvital-biotin-tabs': "دوز بالای بیوتین و ویتامین ب برای توقف سریع ریزش مو و بازسازی ناخن",
|
||
'canina-petvital-energy-gel': "کنسانتره انرژی بالا همراه با الکترولیتها برای سگها و گربههای ضعیف",
|
||
'canina-petvital-mineral-tabs': "مواد معدنی و عناصر کمیاب جهت تراکم استخوانی و دوران بارداری و رشد",
|
||
'canina-petvital-gag': "ترکیب صدف لبسبز نیوزیلند و اسیدهای آمینه جهت تقویت رباطها و تاندونها",
|
||
'canina-petvital-vitamin-tabs': "مولتیویتامین کامل روزانه برای تقویت سیستم دفاعی و افزایش شادابی پت",
|
||
'canina-rinderblut-pulver': "پودر خون گاو غنی از آهن طبیعی و هموگلوبین برای بهبود اشتها و رفع کمخونی",
|
||
'canina-rinderfett-pulver': "مکمل چربی طبیعی با طعمدهندگی بالا جهت جبران کمبود وزن و افزایش انرژی",
|
||
'canina-schwarz-kmmel-samen': "دانههای سیاه دانه مصری برای پشتیبانی متابولیک و دفع طبیعی انگلها",
|
||
'canina-seealgen-bio-seealgenmehl': "جلبک دریایی ارگانیک سرشار از ید طبیعی جهت درخشش و تیره کردن پیگمنتهای مو و بینی",
|
||
'canina-taurin-fr-katzen': "اسید آمینه تورین خالص برای سلامت بینایی و پیشگیری از کاردیومیوپاتی گربهها",
|
||
'canina-velox-gelenkenergie': "پودر صد در صد صدف لبسبز نیوزیلند برای مفاصل، غضروفها و رباطها",
|
||
'canina-welpenbrei': "غذای کمکی بچه سگها برای انتقال آسان از شیر مادر به غذای جامد",
|
||
'canina-welpenmilch': "شیر خشک تخصصی تولهسگ غنی شده با ویتامینها و املاح معدنی فاقد لاکتوز",
|
||
'canina-petvital-bio-insect-shocker': "اسپری دافع انگلهای خارجی کک، کنه و شپش صد در صد طبیعی و بدون سموم شیمیایی",
|
||
'canina-mikrosilber-zahngel': "ژل دندان با نقره میکروسیلور جهت مبارزه با بوی بد دهان، پلاک و عفونت لثه",
|
||
'canina-novagard-green-augenpflege': "محلول ملایم شستشوی چشم سگ و گربه برای پاک کردن ترشحات و کاهش التهابات",
|
||
'canina-novagard-green-pfotenpflege': "مومیایی محافظ پنجهها برای التیام خشکی، قرمزی و ترک خوردگی پنجهها در برف و سرما"
|
||
};
|
||
|
||
async function main() {
|
||
console.log('Seeding products from seed-products-data.json...');
|
||
|
||
// 2. Read JSON data
|
||
const dataPath = path.join(process.cwd() + "/prisma", 'seed-products-data.json');
|
||
if (!fs.existsSync(dataPath)) {
|
||
console.error('seed-products-data.json not found at', dataPath);
|
||
process.exit(1);
|
||
}
|
||
|
||
const productsData = JSON.parse(fs.readFileSync(dataPath, 'utf-8').replace(/^\ufeff/, ''));
|
||
let variantCount = 0;
|
||
|
||
for (const item of productsData) {
|
||
const baseName = item.name;
|
||
const cleanDesc = item.description;
|
||
const cleanShortDesc = item.short_description || '';
|
||
const cleanIngredients = item.ingredients || '';
|
||
const cleanDosage = item.usage_and_dosage || '';
|
||
const suitableFor = determineSuitableFor(baseName, cleanDesc);
|
||
// Split baseName into nameFa and nameEn
|
||
let baseNameFa = baseName;
|
||
let baseNameEn = baseName;
|
||
const matchName = baseName.match(/([^(]+)\(([^)]+)\)/);
|
||
if (matchName) {
|
||
baseNameEn = matchName[1].trim();
|
||
baseNameFa = matchName[2].trim();
|
||
}
|
||
|
||
const baseSlug = slugify(baseNameEn);
|
||
const categorySlug = item.category_slug || 'supplements';
|
||
const category = await findOrCreateCategory(categorySlug);
|
||
|
||
for (const variant of item.variants) {
|
||
const artNo = variant.art_no;
|
||
const barcode = variant.barcode;
|
||
const sellPrice = variant.sell_price || 0;
|
||
const buyPrice = variant.buy_price || 0;
|
||
const sizeLabel = variant.size;
|
||
const { unit, packageSize } = parseSize(sizeLabel);
|
||
|
||
// Build variant-specific slug
|
||
const sizeSlug = slugify(sizeLabel);
|
||
const slug = `${baseSlug}-${sizeSlug}`;
|
||
|
||
// Build display name with size
|
||
const nameFa = `${baseNameFa}`;
|
||
const nameEn = `${baseNameEn} - ${sizeLabel}`;
|
||
const priceDisplay = `${sellPrice.toLocaleString()} تومان`;
|
||
|
||
const RX_PRODUCTS = ['canina-canhydrox-gag', 'canina-petvital-gag', 'canina-herz-vital', 'canina-petvital-arthro-tabletten', 'canina-immun-booster', 'canina-petvital-bio-aktivator', 'canina-rinderblut-pulver', 'canina-velox-gelenkenergie'];
|
||
const requiresRx = RX_PRODUCTS.includes(baseSlug);
|
||
|
||
const product = await prisma.product.upsert({
|
||
where: { artNo },
|
||
update: {
|
||
barcode,
|
||
slug,
|
||
productGroup: baseSlug,
|
||
nameFa,
|
||
nameEn,
|
||
scientificTagline: PRODUCT_TAGLINES_MAP[baseSlug] || null,
|
||
description: cleanDesc,
|
||
shortDescription: cleanShortDesc,
|
||
ingredients: cleanIngredients,
|
||
categoryId: category.id,
|
||
categorySlug: category.slug,
|
||
priceValue: sellPrice,
|
||
wholesalePrice: Math.round(sellPrice * 0.7),
|
||
requiresRx,
|
||
buyPrice,
|
||
priceDisplay,
|
||
unit,
|
||
packageSize,
|
||
dosageLogic: cleanDosage,
|
||
suitableFor,
|
||
imageUrl: getProductImageUrl(baseSlug),
|
||
},
|
||
create: {
|
||
artNo,
|
||
barcode,
|
||
slug,
|
||
productGroup: baseSlug,
|
||
nameFa,
|
||
nameEn,
|
||
scientificTagline: PRODUCT_TAGLINES_MAP[baseSlug] || null,
|
||
description: cleanDesc,
|
||
shortDescription: cleanShortDesc,
|
||
ingredients: cleanIngredients,
|
||
categoryId: category.id,
|
||
categorySlug: category.slug,
|
||
priceValue: sellPrice,
|
||
wholesalePrice: Math.round(sellPrice * 0.7),
|
||
requiresRx,
|
||
buyPrice,
|
||
priceDisplay,
|
||
unit,
|
||
packageSize,
|
||
dosageLogic: cleanDosage,
|
||
suitableFor,
|
||
imageUrl: getProductImageUrl(baseSlug),
|
||
}
|
||
});
|
||
|
||
// Seed ingredients
|
||
await prisma.productIngredient.deleteMany({ where: { productId: product.id } });
|
||
if (cleanIngredients) {
|
||
const parts = cleanIngredients.split(/[،,]/).map((s: string) => s.trim()).filter(Boolean);
|
||
const meaningful = parts.slice(0, 20);
|
||
for (const ing of meaningful) {
|
||
const truncated = ing.substring(0, 150);
|
||
if (truncated.length > 0) {
|
||
await prisma.productIngredient.create({
|
||
data: { productId: product.id, ingredient: truncated }
|
||
});
|
||
}
|
||
}
|
||
}
|
||
|
||
// Seed symptoms
|
||
await prisma.productSymptom.deleteMany({ where: { productId: product.id } });
|
||
const symptomsList = PRODUCT_SYMPTOMS_MAP[baseSlug] || [];
|
||
for (const sym of symptomsList) {
|
||
await prisma.productSymptom.create({
|
||
data: { productId: product.id, symptom: sym }
|
||
});
|
||
}
|
||
|
||
variantCount++;
|
||
}
|
||
}
|
||
|
||
console.log(`Seeded ${variantCount} product variants.`);
|
||
|
||
// Create admin user for blogs
|
||
const adminId = '12345678-1234-1234-1234-123456789012';
|
||
await prisma.user.upsert({
|
||
where: { id: adminId },
|
||
update: { role: 'ADMIN' },
|
||
create: {
|
||
id: adminId,
|
||
mobile: '09120000000',
|
||
email: 'admin@canino-iran.com',
|
||
firstName: 'Admin',
|
||
lastName: 'User',
|
||
role: 'ADMIN'
|
||
}
|
||
});
|
||
|
||
// 3. Seed some Blogs
|
||
const blog1Content = [
|
||
'<p><strong>تغذیه صحیح سگهای بالغ</strong> یکی از مهمترین عوامل در حفظ سلامت و افزایش طول عمر آنهاست. برند کانینا (Canina) با بیش از ۴۰ سال سابقه در تولید مکملهای دامپزشکی در آلمان، استاندارد طلایی تغذیه تکمیلی را تعریف کرده است.</p>',
|
||
'',
|
||
'<h2>اصول تغذیه سگ بالغ</h2>',
|
||
'<p>سگهای بالغ به رژیم غذایی متعادل حاوی پروتئین، چربی، کربوهیدرات، ویتامینها و مواد معدنی نیاز دارند. نسبت Ca:P (کلسیم به فسفر) باید در محدوده ۱.۲:۱ تا ۱.۵:۱ باشد. هرگونه عدم تعادل در این نسبت میتواند منجر به مشکلات کلیوی و استخوانی شود.</p>',
|
||
'',
|
||
'<h2>نقش مکملها در رژیم غذایی</h2>',
|
||
'<p>حتی با بهترین رژیم غذایی، ممکن است برخی مواد مغذی به اندازه کافی تأمین نشوند. محصولات کانینا مانند <strong>Petvital Vitamin-Tabs</strong> (کمپلکس کامل A تا K3) و <strong>Biotin-Tabs</strong> (۱ میلیون میکروگرم بیوتین) نیازهای تغذیهای را پوشش میدهند.</p>',
|
||
'',
|
||
'<h2>اسیدهای چرب ضروری</h2>',
|
||
'<p>روغن سالمون کانینا (Lachs-Öl) با ۱۴٪ امگا ۳ (EPA/DHA) به روش Cold Press استخراج میشود و تمام ویتامینهای حساس به حرارت را حفظ میکند. EPA پیشماده رزولوینهای ضدالتهابی و DHA ۳۰٪ وزن خشک مغز را تشکیل میدهد.</p>',
|
||
'',
|
||
'<h2>مراقبت از مفاصل</h2>',
|
||
'<p>با افزایش سن سگ، غضروف مفصلی تحلیل میرود. گلیکوزآمینوگلیکانهای صدف لب سبز (GAG) با جذب مولکولهای آب در ماتریکس غضروفی، خاصیت بافری مفاصل را بازیابی میکنند. <strong>CANHYDROX GAG</strong> و <strong>FLEXAN</strong> حاوی این ترکیبات حیاتی هستند.</p>',
|
||
'',
|
||
'<h2>هشدارهای مهم تغذیهای</h2>',
|
||
'<ul>',
|
||
'<li>مصرف همزمان ویتامین D3 با D2 مجاز نیست</li>',
|
||
'<li>روغن سیاه دانه در بارداری و شیردهی ممنوع است</li>',
|
||
'<li>روغنهای با غلظت بالا باید تدریجاً به رژیم اضافه شوند تا از پانکراتیت جلوگیری شود</li>',
|
||
'<li>تورین برای گربهها اسید آمینه ضروری است و بدن آنها قادر به سنتز آن نیست</li>',
|
||
'</ul>'
|
||
].join('\n');
|
||
|
||
const blog2Content = [
|
||
'<p><strong>کانینا (Canina)</strong> نماینده رسمی برند <strong>Canina pharma GmbH</strong> در ایران است. این شرکت آلمانی در سال ۱۹۸۴ توسط <strong>پتر و کریستین کرشنمایر</strong> در شهر برگیش گلادباخ تأسیس شد و به یکی از پیشگامان تولید مکملهای طبیعی دامپزشکی در اروپا تبدیل شده است.</p>',
|
||
'',
|
||
'<h2>فلسفه Canina: "مادر طبیعت بهترین نسخه را میداند"</h2>',
|
||
'<p>تمام محصولات کانینا بر پایه مواد اولیه طبیعی و با فرآیندهای پیشرفته تولید میشوند. این شرکت دارای گواهیهای معتبر <strong>IFS (International Featured Standard)</strong> و <strong>HACCP</strong> است و محصولات آن در بیش از ۴۰ کشور جهان توزیع میشود.</p>',
|
||
'',
|
||
'<h2>چرا مکملهای کانینا در ایران؟</h2>',
|
||
'<ul>',
|
||
'<li><strong>کیفیت آلمانی:</strong> تمام محصولات در کارخانه برگیش گلادباخ تحت نظارت دامپزشکان تولید میشوند</li>',
|
||
'<li><strong>بدون مواد مصنوعی:</strong> فاقد رنگ، طعم و نگهدارنده مصنوعی</li>',
|
||
'<li><strong>فرمولاسیون تخصصی:</strong> هر محصول برای نیاز خاصی مانند مفاصل، ایمنی، پوست و مو یا گوارش طراحی شده</li>',
|
||
'<li><strong>تأیید دامپزشکان:</strong> محصولات با مشورت دامپزشکان و متخصصان تغذیه حیوانات فرموله شدهاند</li>',
|
||
'</ul>',
|
||
'',
|
||
'<h2>محصولات پرفروش در ایران</h2>',
|
||
'<p><strong>مفاصل و استخوان:</strong> CANHYDROX GAG (استاندارد طلایی ارتوپدی)، FLEXAN (کلاژن خالص)، Petvital GAG و Velox Gelenkenergie (کنسانتره صدف لب سبز)</p>',
|
||
'<p><strong>سیستم ایمنی و گوارش:</strong> Immun-Booster (خمیر آغوز)، Moor-Tränke (عصاره پیت)، Ballaststoff Mix (فیبر گیاهی)</p>',
|
||
'<p><strong>پوست و مو:</strong> Lachs-Öl (روغن سالمون)، Biotin-Tabs، Seealgen (جلبک دریایی)</p>',
|
||
'<p><strong>قلب و انرژی:</strong> Herz Vital (ال-کارنیتین و زالزالک)، Energy-Gel (ویتامینهای گروه B)</p>',
|
||
'',
|
||
'<h2>تعهد به سلامت حیوانات</h2>',
|
||
'<p>کانینا به عنوان نماینده رسمی کانینا در ایران، متعهد به ارائه محصولات اصل با ضمانت اصالت و پروانه دامپزشکی است. تمام محصولات دارای بستهبندی اصلی آلمان و بارکد اختصاصی هستند.</p>'
|
||
].join('\n');
|
||
|
||
const blogs = [
|
||
{
|
||
title: 'راهنمای جامع تغذیه سگهای بالغ',
|
||
slug: 'adult-dog-nutrition-guide',
|
||
content: blog1Content,
|
||
authorId: adminId,
|
||
isPublished: true,
|
||
},
|
||
{
|
||
title: 'چرا مکملهای کانینا؟',
|
||
slug: 'why-canino-supplements',
|
||
content: blog2Content,
|
||
authorId: adminId,
|
||
isPublished: true,
|
||
}
|
||
];
|
||
|
||
for (const b of blogs) {
|
||
await prisma.blog.upsert({
|
||
where: { slug: b.slug },
|
||
update: {},
|
||
create: b
|
||
});
|
||
}
|
||
console.log('Seeded blogs.');
|
||
}
|
||
|
||
main()
|
||
.catch(e => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
})
|
||
.finally(async () => {
|
||
await prisma.$disconnect();
|
||
});
|