canina/backend/prisma/seed-products.ts
parsa aghaei 8d1b786a24
All checks were successful
Deploy Canina / deploy (push) Successful in 1m50s
chore(brand): rename all Persian occurrences of کانینا to کنینا across the project
2026-08-16 16:40:08 +03:30

549 lines
28 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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':
'https://www.canina.de/media/8c/fb/8e/311000_Canino_Immun_Booster_Paste_Abwehrkraefte_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-lachsol':
'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-olmischung-premium':
'https://www.canina.de/media/ad/28/71/153008_Marine_Oelmischung_Premium_Canina-Pharma_1280x1280.png',
'canina-marine-lmischung-premium':
'https://www.canina.de/media/ad/28/71/153008_Marine_Oelmischung_Premium_Canina-Pharma_1280x1280.png',
'canina-moortranke':
'https://www.canina.de/media/9d/b2/87/112708_Moortraenke_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-kummel-samen':
'https://www.canina.de/media/a9/c8/aa/131105_Schwarzkuemmelsamen_Canina-Pharma_1280x1280.png',
'canina-schwarz-kmmel-samen':
'https://www.canina.de/media/a9/c8/aa/131105_Schwarzkuemmelsamen_Canina-Pharma_1280x1280.png',
'canina-seelgen-tabletten':
'https://www.canina.de/media/e4/c4/b2/130504_130511_130412_Seealgen_Bio-Seealgenmehl_Canina-Pharma_1280x1280.png',
'canina-bio-seelgenmehl':
'https://www.canina.de/media/e4/c4/b2/130504_130511_130412_Seealgen_Bio-Seealgenmehl_Canina-Pharma_1280x1280.png',
'canina-seealgen-tabletten':
'https://www.canina.de/media/e4/c4/b2/130504_130511_130412_Seealgen_Bio-Seealgenmehl_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-fur-katzen':
'https://www.canina.de/media/c6/aa/62/229505_Taurin_fuer_Katzen_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] ||
'https://www.canina.de/media/83/86/e1/123000_123005_Canhydrox_GAG_Canina-Pharma_1280x1280.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':
'مومیایی محافظ پنجه‌ها برای التیام خشکی، قرمزی و ترک خوردگی پنجه‌ها در برف و سرما',
};
export 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);
try {
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 safely
await prisma.productIngredient.deleteMany({
where: { productId: product.id },
});
if (cleanIngredients) {
const parts = cleanIngredients
.split(/[،,]/)
.map((s: string) => s.trim())
.filter(Boolean);
const uniqueIngredients: string[] = Array.from(
new Set<string>(parts.map((ing: string) => ing.substring(0, 150))),
).slice(0, 20);
for (const item of uniqueIngredients) {
const truncated: string = String(item);
if (truncated.length > 0) {
try {
await prisma.productIngredient.create({
data: { productId: product.id, ingredient: truncated },
});
} catch {
// Ignore duplicate ingredient error
}
}
}
}
// Seed symptoms safely
await prisma.productSymptom.deleteMany({
where: { productId: product.id },
});
const symptomsList: string[] = Array.from(
new Set<string>(PRODUCT_SYMPTOMS_MAP[baseSlug] || []),
);
for (const item of symptomsList) {
const sym: string = String(item);
try {
await prisma.productSymptom.create({
data: { productId: product.id, symptom: sym },
});
} catch {
// Ignore duplicate symptom error
}
}
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : String(err);
console.warn(`[Seed] Warning upserting product ${artNo}:`, msg);
}
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) {
try {
await prisma.blog.upsert({
where: { slug: b.slug },
update: {
title: b.title,
content: b.content,
isPublished: b.isPublished,
},
create: b,
});
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : String(err);
console.warn(`[Seed] Warning upserting blog ${b.slug}:`, msg);
}
}
console.log('Seeded blogs.');
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});