first
This commit is contained in:
@@ -0,0 +1,556 @@
|
||||
import { faker } from "@faker-js/faker";
|
||||
import { Types } from "mongoose";
|
||||
|
||||
faker.locale = "fa";
|
||||
import { CategoryThemeEnum } from "../../common/enums/category.enum";
|
||||
import { Logger } from "../../core/logging/logger";
|
||||
import { AttributeValueModel } from "../../modules/category/models/attributeValue.model";
|
||||
import { CategoryModel } from "../../modules/category/models/category.model";
|
||||
import { CategoryAttributeModel } from "../../modules/category/models/CategoryAttribute.model";
|
||||
import { ColorModel } from "../../modules/category/models/color.model";
|
||||
import { MeterageModel } from "../../modules/category/models/meterage.model";
|
||||
import { SizeModel } from "../../modules/category/models/size.model";
|
||||
|
||||
interface ICategorySeed {
|
||||
title_fa: string;
|
||||
title_en: string;
|
||||
icon: string;
|
||||
imageUrl: string;
|
||||
description: string;
|
||||
leaf: boolean;
|
||||
theme?: CategoryThemeEnum;
|
||||
parent?: Types.ObjectId;
|
||||
}
|
||||
|
||||
interface ICategoryAttributeSeed {
|
||||
title: string;
|
||||
hint?: string;
|
||||
type: string;
|
||||
multiple: boolean;
|
||||
required: boolean;
|
||||
}
|
||||
|
||||
const rootCategories: ICategorySeed[] = [
|
||||
{
|
||||
title_fa: "موبایل و تبلت",
|
||||
icon: "mobile",
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
description: "لوازم جانبی",
|
||||
title_en: "mobile",
|
||||
leaf: false,
|
||||
},
|
||||
{
|
||||
title_fa: "لوازم تحریر و اداری",
|
||||
icon: "stationery",
|
||||
description: "انواع لوازم تحریر و اداری",
|
||||
title_en: "stationery-office",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "برق و الکتریکی",
|
||||
icon: "electric",
|
||||
description: "لوازم برق و الکتریکی",
|
||||
title_en: "electric-electrical",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "لوازم و ابزارآلات",
|
||||
icon: "tools",
|
||||
description: "انواع لوازم و ابزارآلات",
|
||||
title_en: "tools-equipment",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "صوت و تصویر",
|
||||
icon: "audio-visual",
|
||||
description: "انواع لوازم صوتی و تصویری",
|
||||
title_en: "audio-visual",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "کامپیوتر",
|
||||
icon: "computer",
|
||||
description: "انواع کامپیوتر و لوازم جانبی",
|
||||
title_en: "computer",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "کنسول بازی",
|
||||
icon: "console",
|
||||
description: "انواع کنسول بازی و لوازم جانبی",
|
||||
title_en: "game-console",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "ورزش و سفر",
|
||||
icon: "sports",
|
||||
description: "لوازم ورزشی و سفر",
|
||||
title_en: "sports-travel",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{ title_fa: "پوشاک و مد", icon: "fashion", description: "لباس و مد", title_en: "fashion", leaf: false, imageUrl: faker.image.imageUrl() },
|
||||
{
|
||||
title_fa: "لوازم خانگی",
|
||||
icon: "home-appliances",
|
||||
description: "لوازم خانه",
|
||||
title_en: "home-appliances",
|
||||
leaf: false,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "متفرقه",
|
||||
icon: "malicious",
|
||||
description: "متفرقه",
|
||||
title_en: "malicious",
|
||||
leaf: true,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
];
|
||||
|
||||
const subcategories: { [key: string]: ICategorySeed[] } = {
|
||||
"موبایل و تبلت": [
|
||||
{
|
||||
title_fa: "گوشی موبایل",
|
||||
icon: "phone",
|
||||
description: "انواع گوشی های موبایل",
|
||||
title_en: "mobile-phones",
|
||||
leaf: true,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
},
|
||||
{
|
||||
title_fa: "تبلت",
|
||||
icon: "tablet",
|
||||
description: "انواع تبلت ها",
|
||||
title_en: "tablets",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "ساعت هوشمند",
|
||||
icon: "watch",
|
||||
description: "انواع ساعت هوشمند",
|
||||
title_en: "smart-watch",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "پاور بانک",
|
||||
icon: "watch",
|
||||
description: "انواع پاور بانک",
|
||||
title_en: "power-banks",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"لوازم تحریر و اداری": [
|
||||
{
|
||||
title_fa: "خودکار و خودنویس",
|
||||
icon: "pen",
|
||||
description: "انواع خودکار و خودنویس",
|
||||
title_en: "pens",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "دفتر و کاغذ",
|
||||
icon: "paper",
|
||||
description: "انواع دفتر و کاغذ",
|
||||
title_en: "paper-notebooks",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"برق و الکتریکی": [
|
||||
{
|
||||
title_fa: "لامپ",
|
||||
icon: "bulb",
|
||||
description: "انواع لامپ ها",
|
||||
title_en: "bulbs",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "کابل و سیم",
|
||||
icon: "cable",
|
||||
description: "انواع کابل و سیم",
|
||||
title_en: "cables-wires",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"لوازم و ابزارآلات": [
|
||||
{
|
||||
title_fa: "آچار و پیچ گوشتی",
|
||||
icon: "wrench",
|
||||
description: "انواع آچار و پیچ گوشتی",
|
||||
title_en: "wrenches-screwdrivers",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "دریل",
|
||||
icon: "drill",
|
||||
description: "انواع دریل ها",
|
||||
title_en: "drills",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"صوت و تصویر": [
|
||||
{
|
||||
title_fa: "تلویزیون",
|
||||
icon: "tv",
|
||||
description: "انواع تلویزیون",
|
||||
title_en: "televisions",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "اسپیکر",
|
||||
icon: "speaker",
|
||||
description: "انواع اسپیکر",
|
||||
title_en: "speakers",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "هدفون",
|
||||
icon: "headphone",
|
||||
description: "انواع هدفون",
|
||||
title_en: "headphones",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Colored,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "دوربین عکاسی",
|
||||
icon: "camera",
|
||||
description: "انواع دوربین عکاسی",
|
||||
title_en: "cameras",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
کامپیوتر: [
|
||||
{
|
||||
title_fa: "لپ تاپ",
|
||||
icon: "laptop",
|
||||
description: "انواع لپ تاپ",
|
||||
title_en: "laptops",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "موس و کیبورد",
|
||||
icon: "mouse-keyboard",
|
||||
description: "انواع موس و کیبورد",
|
||||
title_en: "mouse-keyboards",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"کنسول بازی": [
|
||||
{
|
||||
title_fa: "پلی استیشن",
|
||||
icon: "playstation",
|
||||
description: "انواع پلی استیشن",
|
||||
title_en: "playstations",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "ایکس باکس",
|
||||
icon: "xbox",
|
||||
description: "انواع ایکس باکس",
|
||||
title_en: "xbox",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"ورزش و سفر": [
|
||||
{
|
||||
title_fa: "تجهیزات ورزشی",
|
||||
icon: "sports-equipment",
|
||||
description: "انواع تجهیزات ورزشی",
|
||||
title_en: "sports-equipment",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "لوازم سفر",
|
||||
icon: "travel",
|
||||
description: "انواع لوازم سفر",
|
||||
title_en: "travel-equipment",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"پوشاک و مد": [
|
||||
{
|
||||
title_fa: "لباس زنانه",
|
||||
icon: "women-clothing",
|
||||
description: "انواع لباس زنانه",
|
||||
title_en: "women-clothing",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "لباس مردانه",
|
||||
icon: "men-clothing",
|
||||
description: "انواع لباس مردانه",
|
||||
title_en: "men-clothing",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.Sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
"لوازم خانگی": [
|
||||
{
|
||||
title_fa: "لوازم آشپزخانه",
|
||||
icon: "kitchen-appliances",
|
||||
description: "انواع لوازم آشپزخانه",
|
||||
title_en: "kitchen-appliances",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
{
|
||||
title_fa: "لوازم نظافت",
|
||||
icon: "cleaning-appliances",
|
||||
description: "انواع لوازم نظافت",
|
||||
title_en: "cleaning-appliances",
|
||||
leaf: true,
|
||||
theme: CategoryThemeEnum.No_color_No_sized,
|
||||
imageUrl: faker.image.imageUrl(),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const categoryAttributesMap: { [key: string]: ICategoryAttributeSeed[] } = {
|
||||
"گوشی موبایل": [
|
||||
{ title: "باتری", hint: "ظرفیت باتری", type: "select", multiple: false, required: true },
|
||||
{ title: "دوربین", hint: "کیفیت دوربین", type: "select", multiple: false, required: true },
|
||||
{ title: "سیستم عامل", hint: "نوع سیستم عامل", type: "select", multiple: false, required: true },
|
||||
{ title: "حافظه داخلی موبایل", hint: "ظرفیت حافظه", type: "select", multiple: false, required: true },
|
||||
{ title: "پشتیبانی از 5G", hint: "آیا پشتیبانی میکند؟", type: "checkbox", multiple: false, required: false },
|
||||
],
|
||||
تبلت: [
|
||||
{ title: "اندازه صفحه تبلت", hint: "اینچ", type: "select", multiple: false, required: true },
|
||||
{ title: "پردازنده تبلت", hint: "نوع پردازنده", type: "select", multiple: false, required: true },
|
||||
{ title: "دوربین جلو", hint: "کیفیت دوربین جلو", type: "select", multiple: false, required: false },
|
||||
{ title: "ظرفیت باتری", hint: "میلیآمپر ساعت", type: "select", multiple: false, required: true },
|
||||
{ title: "اتصال به شبکه", hint: "نوع شبکه", type: "select", multiple: false, required: false },
|
||||
],
|
||||
"خودکار و خودنویس": [
|
||||
{ title: "نوع جوهر", hint: "جوهر مورد استفاده", type: "select", multiple: false, required: true },
|
||||
{ title: "ضخامت نوشتاری", hint: "ضخامت نوک", type: "select", multiple: false, required: true },
|
||||
{ title: "قابلیت شارژ مجدد", hint: "آیا قابل شارژ است؟", type: "checkbox", multiple: false, required: false },
|
||||
{ title: "جنس بدنه خودکار", hint: "جنس بدنه خودکار", type: "select", multiple: false, required: true },
|
||||
{ title: "رنگ جوهر", hint: "رنگ جوهر خودکار", type: "select", multiple: false, required: true },
|
||||
],
|
||||
لامپ: [
|
||||
{ title: "نوع لامپ", hint: "نوع لامپ (LED، هالوژن و غیره)", type: "select", multiple: false, required: true },
|
||||
{ title: "توان مصرفی لامپ", hint: "وات", type: "select", multiple: false, required: true },
|
||||
{ title: "رنگ نور", hint: "رنگ نور", type: "select", multiple: false, required: true },
|
||||
{ title: "طول عمر", hint: "ساعت", type: "select", multiple: false, required: true },
|
||||
{ title: "قابلیت تنظیم شدت نور", hint: "آیا قابل تنظیم است؟", type: "checkbox", multiple: false, required: false },
|
||||
],
|
||||
تلویزیون: [
|
||||
{ title: "اندازه صفحه تلویزیون", hint: "اینچ", type: "select", multiple: false, required: true },
|
||||
{ title: "رزولوشن", hint: "کیفیت تصویر", type: "select", multiple: false, required: true },
|
||||
{ title: "نوع صفحه", hint: "LED, OLED, QLED", type: "select", multiple: false, required: true },
|
||||
{ title: "هوشمند", hint: "آیا هوشمند است؟", type: "checkbox", multiple: false, required: false },
|
||||
{ title: "درگاههای ارتباطی", hint: "نوع و تعداد درگاهها", type: "select", multiple: true, required: true },
|
||||
],
|
||||
"لپ تاپ": [
|
||||
{ title: "پردازنده لپ تاپ", hint: "نوع پردازنده", type: "select", multiple: false, required: true },
|
||||
{ title: "حافظه رم", hint: "ظرفیت حافظه رم", type: "select", multiple: false, required: true },
|
||||
{ title: "حافظه داخلی", hint: "ظرفیت حافظه", type: "select", multiple: false, required: true },
|
||||
{ title: "اندازه صفحه", hint: "اینچ", type: "select", multiple: false, required: true },
|
||||
{ title: "کارت گرافیک", hint: "نوع کارت گرافیک", type: "select", multiple: false, required: true },
|
||||
],
|
||||
"لباس زنانه": [
|
||||
{ title: "جنس پارچه", hint: "نوع پارچه", type: "select", multiple: false, required: true },
|
||||
{ title: "نوع یقه", hint: "یقه لباس", type: "select", multiple: false, required: true },
|
||||
{ title: "نوع آستین", hint: "آستین لباس", type: "select", multiple: false, required: true },
|
||||
{ title: "مدل لباس", hint: "نوع و مدل لباس", type: "select", multiple: false, required: true },
|
||||
{ title: "نوع شستشو", hint: "نحوه شستشو", type: "select", multiple: false, required: false },
|
||||
],
|
||||
"لوازم آشپزخانه": [
|
||||
{ title: "توان مصرفی", hint: "توان لوازم برقی", type: "select", multiple: false, required: true },
|
||||
{ title: "جنس بدنه", hint: "جنس بدنه دستگاه", type: "select", multiple: false, required: true },
|
||||
{ title: "ظرفیت", hint: "ظرفیت دستگاه", type: "select", multiple: false, required: true },
|
||||
{ title: "قابلیت تنظیم", hint: "آیا قابلیت تنظیم دارد؟", type: "checkbox", multiple: false, required: false },
|
||||
{ title: "نوع کاربری", hint: "کاربری دستگاه", type: "select", multiple: false, required: true },
|
||||
],
|
||||
// Add more categories as needed
|
||||
};
|
||||
|
||||
const attributeValuesMap: { [key: string]: string[] } = {
|
||||
باتری: ["3000mAh", "4000mAh", "5000mAh", "6000mAh", "7000mAh"],
|
||||
دوربین: ["12MP", "16MP", "20MP", "48MP", "108MP"],
|
||||
"سیستم عامل": ["اندروید", "iOS", "ویندوز", "لینوکس", "سایر"],
|
||||
"حافظه داخلی موبایل": ["32GB", "64GB", "128GB", "256GB", "512GB"],
|
||||
"پشتیبانی از 5G": ["بله", "خیر"],
|
||||
"اندازه صفحه تبلت": ["7 اینچ", "10 اینچ", "13 اینچ", "15 اینچ", "17 اینچ"],
|
||||
"پردازنده تبلت": ["Intel", "AMD", "Apple M1", "Qualcomm", "MediaTek"],
|
||||
"دوربین جلو": ["5MP", "8MP", "12MP", "16MP", "20MP"],
|
||||
"ظرفیت باتری": ["2000mAh", "3000mAh", "4000mAh", "5000mAh", "6000mAh"],
|
||||
"اتصال به شبکه": ["WiFi", "4G", "5G", "Ethernet", "بلوتوث"],
|
||||
"نوع جوهر": ["ژل", "روغنی", "آبی", "خودکار", "پلاستیکی"],
|
||||
"ضخامت نوشتاری": ["0.5mm", "0.7mm", "1.0mm", "1.2mm", "1.5mm"],
|
||||
"قابلیت شارژ مجدد": ["بله", "خیر"],
|
||||
"جنس بدنه خودکار": ["فلز", "پلاستیک", "چوب", "سرامیک", "کربن"],
|
||||
"رنگ جوهر": ["مشکی", "آبی", "قرمز", "سبز", "بنفش"],
|
||||
"نوع لامپ": ["LED", "هالوژن", "فلورسنت", "رشتهای", "پلاسما"],
|
||||
"توان مصرفی لامپ": ["5W", "10W", "15W", "20W", "25W"],
|
||||
"رنگ نور": ["سفید", "زرد", "آبی", "سبز", "قرمز"],
|
||||
"طول عمر": ["1000 ساعت", "5000 ساعت", "10000 ساعت", "20000 ساعت", "50000 ساعت"],
|
||||
"قابلیت تنظیم شدت نور": ["بله", "خیر"],
|
||||
"اندازه صفحه تلویزیون": ["20 اینچ", "32 اینچ", "40 اینچ", "60 اینچ", "70 اینچ"],
|
||||
رزولوشن: ["720p", "1080p", "4K", "8K", "HDR"],
|
||||
"نوع صفحه": ["LED", "OLED", "QLED", "Plasma", "LCD"],
|
||||
هوشمند: ["بله", "خیر"],
|
||||
"درگاههای ارتباطی": ["HDMI", "USB", "Bluetooth", "WiFi", "Ethernet"],
|
||||
"پردازنده لپ تاپ": ["Intel", "AMD", "Apple M1", "Qualcomm", "Apple M2"],
|
||||
"حافظه رم": ["4GB", "8GB", "16GB", "32GB", "64GB"],
|
||||
"حافظه داخلی": ["128GB", "256GB", "512GB", "1TB"],
|
||||
"اندازه صفحه": ["14 اینچ", "12 اینچ", "16 اینچ"],
|
||||
"کارت گرافیک": ["NVIDIA", "AMD", "Intel", "Apple M1", "ARM Mali"],
|
||||
"جنس پارچه": ["پنبه", "پلیاستر", "نایلون", "ریون", "کتان"],
|
||||
"نوع یقه": ["گرد", "هفت", "ایستاده", "دکمهای", "یقه اسکی"],
|
||||
"نوع آستین": ["کوتاه", "بلند", "سهربع", "بیآستین", "کشباف"],
|
||||
"مدل لباس": ["تیشرت", "پیراهن", "ژاکت", "هودی", "پلیور"],
|
||||
"نوع شستشو": ["ماشینی", "دستی", "خشکشویی", "آب سرد", "آب گرم"],
|
||||
"توان مصرفی": ["150W", "200W", "400W"],
|
||||
"جنس بدنه": ["فلز", "پلاستیک", "چوب", "سرامیک", "کربن"],
|
||||
ظرفیت: ["1 لیتر", "2 لیتر", "3 لیتر", "4 لیتر", "5 لیتر"],
|
||||
"قابلیت تنظیم": ["بله", "خیر"],
|
||||
"نوع کاربری": ["آبمیوهگیری", "مخلوطکن", "آسیاب", "کبابپز", "زودپز"],
|
||||
// Add more attributes and their values as needed
|
||||
};
|
||||
|
||||
export const seedCategories = async (logger: Logger) => {
|
||||
try {
|
||||
logger.info("Categories seeding started");
|
||||
|
||||
const colors = (await ColorModel.find()).map((color) => color._id);
|
||||
const sizes = (await SizeModel.find()).map((size) => size._id);
|
||||
const meterages = (await MeterageModel.find()).map((meterage) => meterage._id);
|
||||
|
||||
const createdCategories: { [key: string]: Types.ObjectId } = {};
|
||||
const createdSubCategories: { [key: string]: Types.ObjectId } = {};
|
||||
|
||||
// Create root categories
|
||||
for (const category of rootCategories) {
|
||||
const { title_fa, icon, description, title_en, leaf, imageUrl } = category;
|
||||
|
||||
const rootCategory = new CategoryModel({ title_fa, icon, title_en, description, leaf, imageUrl });
|
||||
await rootCategory.save();
|
||||
|
||||
createdCategories[title_fa] = rootCategory._id;
|
||||
}
|
||||
|
||||
// Create subcategories
|
||||
for (const [rootName, subs] of Object.entries(subcategories)) {
|
||||
const parentId = createdCategories[rootName];
|
||||
if (parentId) {
|
||||
for (const subcategory of subs) {
|
||||
const { title_fa, icon, description, title_en, leaf, theme, imageUrl } = subcategory;
|
||||
|
||||
const catVariants =
|
||||
theme === CategoryThemeEnum.Colored
|
||||
? [...colors]
|
||||
: theme === CategoryThemeEnum.Meterage
|
||||
? [...meterages]
|
||||
: theme === CategoryThemeEnum.Sized
|
||||
? [...sizes]
|
||||
: [];
|
||||
|
||||
const subCategoryDoc = new CategoryModel({
|
||||
title_fa,
|
||||
icon,
|
||||
imageUrl,
|
||||
title_en,
|
||||
description,
|
||||
leaf,
|
||||
theme,
|
||||
variants: catVariants,
|
||||
parent: parentId,
|
||||
});
|
||||
await subCategoryDoc.save();
|
||||
|
||||
// Save the subcategory ID for later use
|
||||
createdSubCategories[title_fa] = subCategoryDoc._id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const createdAttributes: { [key: string]: number } = {};
|
||||
|
||||
// Generate attributes for each subcategory
|
||||
for (const [subcategoryTitle, attributes] of Object.entries(categoryAttributesMap)) {
|
||||
const subcategoryId = createdSubCategories[subcategoryTitle];
|
||||
if (subcategoryId) {
|
||||
for (const attr of attributes) {
|
||||
const attributeDoc = new CategoryAttributeModel({
|
||||
category: subcategoryId,
|
||||
title: attr.title,
|
||||
hint: attr.hint,
|
||||
type: attr.type,
|
||||
multiple: attr.multiple,
|
||||
required: attr.required,
|
||||
});
|
||||
await attributeDoc.save();
|
||||
createdAttributes[attr.title] = attributeDoc._id;
|
||||
}
|
||||
} else {
|
||||
logger.warn(`Subcategory '${subcategoryTitle}' not found.`);
|
||||
}
|
||||
}
|
||||
// Generate values for each attribute
|
||||
for (const [attributeTitle, attributeId] of Object.entries(createdAttributes)) {
|
||||
const values = attributeValuesMap[attributeTitle] || [];
|
||||
|
||||
for (const valueText of values) {
|
||||
await AttributeValueModel.create({
|
||||
attribute: attributeId,
|
||||
text: valueText,
|
||||
});
|
||||
|
||||
// await valueDoc.save();
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("Categories, subcategories, attributes, and values seeded successfully");
|
||||
} catch (error) {
|
||||
logger.error("Error seeding categories:", error);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user