canina/backend/prisma/seed.ts
parsa aghaei 0ea6c6d271 feat: enrich all site content with Canina pharma research data
- Add 20 new products to frontend products.ts (total 29 products)
- Enrich existing 9 product descriptions with biochemical/clinical details
- Add new blog articles with real content from research document
- Update UI texts with Canina brand history (1984 founding, IFS/HACCP)
- Add 9 new scientific terms (Ca:P, D3, BARF, biotin, taurine, etc.)
- Expand INGREDIENTS_WIKI with collagens, biotin, taurine entries
- Add new medical options (heart disease, parasites) to SmartAdvisor
2026-07-11 13:34:22 +03:30

215 lines
12 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';
import * as ts from 'typescript';
import * as vm from 'vm';
const prisma = new PrismaClient();
async function main() {
console.log('Wiping existing database records...');
await prisma.reminderCompletion.deleteMany();
await prisma.reminder.deleteMany();
await prisma.healthLog.deleteMany();
await prisma.petMedicalCondition.deleteMany();
await prisma.pet.deleteMany();
await prisma.orderItem.deleteMany();
await prisma.order.deleteMany();
await prisma.blog.deleteMany();
await prisma.walletTransaction.deleteMany();
await prisma.userAddress.deleteMany();
await prisma.user.deleteMany();
await prisma.productIngredient.deleteMany();
await prisma.productSymptom.deleteMany();
await prisma.product.deleteMany();
await prisma.coupon.deleteMany();
await prisma.uiText.deleteMany();
await prisma.scientificTerm.deleteMany();
await prisma.category.deleteMany();
console.log('Database successfully wiped.');
console.log('Creating Admin User...');
await prisma.user.upsert({
where: { id: '12345678-1234-1234-1234-123456789012' },
update: {},
create: {
id: '12345678-1234-1234-1234-123456789012',
firstName: 'Admin',
lastName: 'System',
email: 'admin@canino.ir',
role: 'ADMIN',
mobile: '09000000000'
}
});
// Seeding UI Texts
console.log('Seeding UI Texts...');
const uiTexts = {
hero_badge: "از ۱۹۸۴ در خدمت سلامت حیوانات",
hero_title: "تخصص آلمانی در خدمت\nسلامت پت‌های خانگی",
hero_desc: "از سال ۱۹۸۴، شرکت Canina pharma GmbH در برگیش گلادباخ آلمان، با بهره‌گیری از مواد اولیه طبیعی و فرآیندهای پیشرفته، استاندارد طلایی مکمل‌های دامپزشکی را تعریف می‌کند. کانینو نماینده رسمی این برند در ایران است.",
hero_btn_advisor: "دستیار سلامت پت",
hero_btn_products: "مشاهده محصولات",
hero_stat_founded: "۱۹۸۴ سال تأسیس",
hero_stat_agencies: "نمایندگی فعال",
hero_stat_german_formula: "فرمول آلمانی",
hero_image_badge: "سرآمد علمی در پزشکی پت‌ها",
hero_image_title: "مکمل‌های تایید شده دامپزشکی با گواهی IFS",
hero_quality_standard: "استاندارد کیفی آلمان (IFS & HACCP)",
cta_title: "می‌خواهید بدانید کدام محصول برای پت شما مناسب‌تر است؟",
cta_subtitle: "تیم متخصص دامپزشکی کانینو ایران آماده پاسخگویی به سوالات شماست. با بیش از ۴۰ محصول تخصصی، راهکار مناسب هر نیاز بالینی را خواهید یافت.",
cta_btn_free: "دریافت رژیم مکمل رایگان",
cta_btn_products: "ورود به محصولات تخصصی",
about_teaser_badge: "داستان ما از آلمان",
about_teaser_title: "Canina pharma GmbH میراثی از ۱۹۸۴",
about_teaser_desc: "شرکت Canina pharma GmbH در سال ۱۹۸۴ توسط پتر و کریستین کرشن‌مایر در شهر برگیش گلادباخ آلمان تأسیس شد. این شرکت با شعار «مادر طبیعت بهترین نسخه را می‌داند» از مواد اولیه طبیعی و تجدیدپذیر برای تولید مکمل‌های با گرید دارویی استفاده می‌کند. امروزه محصولات کانینا در بیش از ۴۰ کشور جهان توزیع می‌شود و نماینده رسمی آن در ایران با نام کانینو به ارائه محصولات اصل با پروانه دامپزشکی می‌پردازد.",
about_teaser_feat1_title: "مواد اولیه نایاب",
about_teaser_feat1_desc: "استفاده از پودر صدف لب‌سبز اصل نیوزیلند (Perna canaliculus)، پیت طبیعی آلمان، آغوز و روغن‌های گیاهی ارگانیک با گرید دارویی.",
about_teaser_feat2_title: "فاقد مواد نگهدارنده",
about_teaser_feat2_desc: "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگ‌های مصنوعی، طعم‌دهنده‌ها و نگهدارنده‌های شیمیایی هستند.",
about_teaser_feat3_title: "تاییدیه بین‌المللی",
about_teaser_feat3_desc: "دارای گواهی IFS (International Featured Standard) و HACCP. محصولات مطابق با سخت‌گیرانه‌ترین استانداردهای ایمنی مواد غذایی و دارویی اتحادیه اروپا تولید می‌شوند.",
about_teaser_quality_title: "کیفیت آلمانی",
about_teaser_quality_desc: "استانداردهای فوق‌دارویی تولید شده در کارخانه برگیش گلادباخ",
ingredients_wiki: JSON.stringify([
{
id: "green-mussel",
name: "صدف لب‌سبز (Perna Canaliculus)",
description: "این صدف بومی سواحل بکر نیوزیلند است و تنها منبع طبیعی حاوی گلیکوزآمین‌گلیکان‌ها (GAG) در غلظت بسیار بالا محسوب می‌شود. GAGها مولکول‌های آب را در ماتریکس غضروفی جذب کرده و خاصیت بافری و الاستیسیته مفاصل را بازیابی می‌کنند.",
benefits: [
"بازسازی بافت غضروفی تخریب شده",
"خواص ضدالتهابی طبیعی برای رباط‌ها",
"تامین اسیدهای چرب امگا ۳ خاص (ETA)"
]
},
{
id: "silver",
name: "نقره میکروسیلور (Microsilver)",
description: "ذرات نقره خالص با ساختار اسفنجی که به دلیل اندازه ذرات درشت، جذب خون نمی‌شوند اما اثر آنتی‌باکتریال پایداری بر سطح غشاها دارند. بر خلاف نقره کلوئیدی معمولی، میکروسیلور رسوب سطحی طولانی‌مدت ایجاد کرده و فلور طبیعی را تخریب نمی‌کند.",
benefits: [
"مبارزه با باکتری‌های مقاوم در دهان و پوست",
"عدم آسیب به فلور طبیعی بدن",
"جایگزین ایمن برای آنتی‌بیوتیک‌های موضعی"
]
},
{
id: "colostrum",
name: "آغوز (Colostrum)",
description: "اولین شیر پستانداران که حاوی دوز بالایی از ایمونوگلوبولین‌ها (IgG, IgA, IgM)، لاکتوفرین و سایتوکاین‌ها برای فعال‌سازی فوری سیستم ایمنی است. سد دفاعی روده را تقویت کرده و از نفوذ پاتوژن‌ها جلوگیری می‌کند.",
benefits: [
"تقویت سد دفاعی روده",
"انتقال مستقیم آنتی‌بادی به نوزادان",
"تسریع نقاهت بعد از جراحی"
]
},
{
id: "peat-extract",
name: "عصاره پیت (Peat Extract)",
description: "ماده‌ای کاملاً طبیعی حاصل از تجزیه گیاهان در طول هزاران سال که غنی از اسیدهای هومیک با ساختار پلیمری دارای بار منفی است. سموم، قارچ‌ها و باکتری‌های مضر را در روده به دام انداخته و دفع می‌کند.",
benefits: [
"جذب سموم و فلزات سنگین در دستگاه گوارش",
"تنظیم فلور روده",
"بهبود اشتها و هضم"
]
},
{
id: "collagen",
name: "کلاژن هیدرولیز شده",
description: "پپتیدهای کلاژن نوع I و II با وزن مولکولی پایین که مستقیماً در ماتریکس غضروف مفصلی جذب شده و سنتز کلاژن را تحریک می‌کنند. پروتئین خالص ۹۴٪.",
benefits: [
"بازسازی غضروف مفصلی",
"تقویت بافت همبند",
"بهبود خاصیت ارتجاعی مفاصل"
]
},
{
id: "biotin",
name: "بیوتین (ویتامین H / B7)",
description: "کوآنزیم کربوکسیلازهای مسئول سنتز اسیدهای چرب و گلوکونئوژنز. با دوز ۱,۰۰۰,۰۰۰ میکروگرم در کیلوگرم در محصولات کانینو، قوی‌ترین دوز موجود در بازار مکمل‌های دامپزشکی.",
benefits: [
"جلوگیری از ریزش مو",
"تقویت رنگدانه پوشش",
"محکم‌سازی پنجه و ناخن"
]
},
{
id: "taurin",
name: "تورین",
description: "اسید آمینه ضروری شرطی برای گربه‌ها. بدن گربه قادر به سنتز تورین نیست و کمبود آن منجر به دژنراسیون مرکزی شبکیه (نابینایی) و کاردیومیوپاتی متسع می‌شود.",
benefits: [
"سلامت بینایی و شبکیه چشم",
"تقویت عضله قلب",
"سیستم ایمنی گربه"
]
}
]),
medical_options: JSON.stringify([
{ id: "joint_surgery", label: "جراحی مفاصل", condition: "جراحی مفاصل" },
{ id: "recent_birth", label: "زایمان اخیر", condition: "زایمان اخیر" },
{ id: "pregnancy", label: "بارداری", condition: "بارداری" },
{ id: "digestion", label: "مشکلات گوارشی", condition: "مشکلات گوارشی" },
{ id: "hair_loss", label: "ریزش موی شدید", condition: "ریزش موی شدید" },
{ id: "appetite", label: "بی‌اشتهایی", condition: "بی‌اشتهایی" },
{ id: "heart_disease", label: "نارسایی قلبی", condition: "نارسایی قلبی" },
{ id: "parasites", label: "آلودگی انگلی", condition: "آلودگی انگلی" }
])
};
for (const [key, value] of Object.entries(uiTexts)) {
await prisma.uiText.upsert({
where: { key },
update: { value },
create: { key, value }
});
}
// 2. Seed Scientific Terms
console.log('Seeding Scientific Terms...');
const termsFilePath = path.join(__dirname, '..', '..', 'frontend', 'application', 'lib', 'data', 'scientificTerms.ts');
if (fs.existsSync(termsFilePath)) {
const termsContent = fs.readFileSync(termsFilePath, 'utf-8');
const termsJsCode = ts.transpile(termsContent, {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2018,
});
const termsContext = { exports: {} };
vm.createContext(termsContext);
vm.runInContext(termsJsCode, termsContext);
const SCIENTIFIC_TERMS = (termsContext.exports as any).SCIENTIFIC_TERMS;
if (SCIENTIFIC_TERMS) {
for (const [key, termData] of Object.entries(SCIENTIFIC_TERMS)) {
const td = termData as any;
await prisma.scientificTerm.upsert({
where: { key },
update: {
term: td.term,
definition: td.definition,
wikiId: td.wikiId || 'general'
},
create: {
key,
term: td.term,
definition: td.definition,
wikiId: td.wikiId || 'general'
}
});
}
}
}
console.log('Seeding completed successfully!');
}
main()
.catch((e) => {
console.error('Error seeding data:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});