diff --git a/src/common/constants/index.ts b/src/common/constants/index.ts index f9119d2..d79e53a 100755 --- a/src/common/constants/index.ts +++ b/src/common/constants/index.ts @@ -1,7 +1,5 @@ // export const AUTH_THROTTLE = "AUTH_THROTTLE"; -export const AI_CONFIG = 'AI_CONFIG'; export const MIKRO_ORM_QUERY_LOGGER = 'MIKRO_ORM_QUERY_LOGGER'; -export const NAJVA_CONFIG = 'NAJVA_CONFIG'; export const AUTH_THROTTLE_TTL = 1 * 60 * 1000; export const AUTH_THROTTLE_LIMIT = 5; export const AUTH__REFRESH_THROTTLE_TTL = 10 * 60 * 1000; diff --git a/src/seeders/DatabaseSeeder.ts b/src/seeders/DatabaseSeeder.ts index 0473f25..183ee25 100644 --- a/src/seeders/DatabaseSeeder.ts +++ b/src/seeders/DatabaseSeeder.ts @@ -9,6 +9,7 @@ import { CategoriesSeeder } from './categories.seeder'; import { ProductsFieldsSeeder } from './product-fields.seeder'; import { FieldOption } from 'src/modules/form-builder/entities/field-option.entity'; import { FieldOptionSeeder } from './field-options.seeder'; +import { PrintFormSeeder } from './print-form.seeder'; // import { AttributesSeeder } from './attribute.seeder'; // import { AttributeValueSeeder } from './attribute-value.seeder'; @@ -16,7 +17,7 @@ import { FieldOptionSeeder } from './field-options.seeder'; export class DatabaseSeeder extends Seeder { async run(em: EntityManager) { - const TOTAL_STEPS = 15; + const TOTAL_STEPS = 16; console.info('[Seeder] Starting database seed'); // 1. Create Permissions console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`); @@ -57,13 +58,19 @@ export class DatabaseSeeder extends Seeder { await fieldOptionsSeeder.run(em); console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`); - // 12. Create Admins - console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating admins`); - const adminsSeeder = new AdminsSeeder(); - await adminsSeeder.run(em, rolesMap); + // 12. Create print form sections and fields + console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating print form sections`); + const printFormSeeder = new PrintFormSeeder(); + await printFormSeeder.run(em); console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`); - // 13. Create Users + // 13. Create Admins + console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating admins`); + const adminsSeeder = new AdminsSeeder(); + await adminsSeeder.run(em, rolesMap); + console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`); + + // 14. Create Users // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating users`); // const usersSeeder = new UsersSeeder(); // await usersSeeder.run(em); diff --git a/src/seeders/data/print-form.data.ts b/src/seeders/data/print-form.data.ts new file mode 100644 index 0000000..b4b94f7 --- /dev/null +++ b/src/seeders/data/print-form.data.ts @@ -0,0 +1,356 @@ +import { FieldType } from 'src/modules/form-builder/interface/print'; + +export interface PrintFormFieldOptionData { + value: string; + order?: number; +} + +export interface PrintFormFieldData { + name: string; + type: FieldType; + isRequired: boolean; + multiple?: boolean; + order: number; + options?: PrintFormFieldOptionData[]; +} + +export interface PrintFormSectionData { + title: string; + order: number; + fields: PrintFormFieldData[]; +} + +export const printFormSectionsData: PrintFormSectionData[] = [ + { + title: 'بخش یک', + order: 1, + fields: [ + { + name: 'نام پروژه', + type: FieldType.text, + isRequired: true, + order: 1, + }, + { + name: 'نوع محصول', + type: FieldType.select, + isRequired: true, + order: 2, + options: [ + { value: 'کتاب', order: 1 }, + { value: 'مجله', order: 2 }, + { value: 'کاتالوگ', order: 3 }, + { value: 'بروشور', order: 4 }, + { value: 'لوح فشرده', order: 5 }, + ], + }, + { + name: 'تعداد صفحات', + type: FieldType.number, + isRequired: true, + order: 3, + }, + { + name: 'تاریخ تحویل مورد انتظار', + type: FieldType.date, + isRequired: false, + order: 4, + }, + ], + }, + { + title: 'بخش دوم', + order: 2, + fields: [ + { + name: 'گرماژ کاغذ', + type: FieldType.radio, + isRequired: true, + order: 1, + options: [ + { value: '70 گرم', order: 1 }, + { value: '80 گرم', order: 2 }, + { value: '100 گرم', order: 3 }, + { value: '120 گرم', order: 4 }, + { value: '135 گرم', order: 5 }, + ], + }, + { + name: 'سایز کاغذ', + type: FieldType.select, + isRequired: true, + order: 2, + options: [ + { value: 'A4', order: 1 }, + { value: 'A5', order: 2 }, + { value: 'B5', order: 3 }, + { value: 'وزیری', order: 4 }, + { value: 'رقعی', order: 5 }, + { value: 'سلطانی', order: 6 }, + ], + }, + { + name: 'نوع کاغذ', + type: FieldType.select, + isRequired: true, + order: 3, + options: [ + { value: 'تحریر', order: 1 }, + { value: 'گلاسه', order: 2 }, + { value: 'کرافت', order: 3 }, + { value: 'انباره', order: 4 }, + ], + }, + { + name: 'رنگ کاغذ', + type: FieldType.radio, + isRequired: false, + order: 4, + options: [ + { value: 'سفید', order: 1 }, + { value: 'کرم', order: 2 }, + { value: 'خاکستری', order: 3 }, + ], + }, + ], + }, + { + title: 'بخش سوم', + order: 3, + fields: [ + { + name: 'نوع جلد', + type: FieldType.radio, + isRequired: true, + order: 1, + options: [ + { value: 'شومیز', order: 1 }, + { value: 'گالینگور', order: 2 }, + { value: 'جلد سخت', order: 3 }, + ], + }, + { + name: 'گرماژ جلد', + type: FieldType.select, + isRequired: true, + order: 2, + options: [ + { value: '250 گرم', order: 1 }, + { value: '300 گرم', order: 2 }, + { value: '350 گرم', order: 3 }, + ], + }, + { + name: 'نوع پوشش جلد', + type: FieldType.select, + isRequired: true, + order: 3, + options: [ + { value: 'مات', order: 1 }, + { value: 'براق', order: 2 }, + { value: 'سلفون', order: 3 }, + { value: 'UV', order: 4 }, + ], + }, + { + name: 'رنگ جلد', + type: FieldType.text, + isRequired: false, + order: 4, + }, + ], + }, + { + title: 'بخش چهارم', + order: 4, + fields: [ + { + name: 'نوع چاپ', + type: FieldType.radio, + isRequired: true, + order: 1, + options: [ + { value: 'افست', order: 1 }, + { value: 'دیجیتال', order: 2 }, + ], + }, + { + name: 'رنگ چاپ', + type: FieldType.select, + isRequired: true, + order: 2, + options: [ + { value: 'تک رنگ', order: 1 }, + { value: 'دو رنگ', order: 2 }, + { value: 'CMYK تمام رنگ', order: 3 }, + { value: 'Pantone', order: 4 }, + ], + }, + { + name: 'تیراژ', + type: FieldType.number, + isRequired: true, + order: 3, + }, + { + name: 'سمت چاپ', + type: FieldType.radio, + isRequired: true, + order: 4, + options: [ + { value: 'یک رو', order: 1 }, + { value: 'دو رو', order: 2 }, + ], + }, + ], + }, + { + title: 'بخش پنجم', + order: 5, + fields: [ + { + name: 'نوع صحافی', + type: FieldType.select, + isRequired: true, + order: 1, + options: [ + { value: 'چسبی', order: 1 }, + { value: 'منگنه', order: 2 }, + { value: 'سیمی', order: 3 }, + { value: 'فنری', order: 4 }, + { value: 'جلد سخت', order: 5 }, + ], + }, + { + name: 'نوع برش', + type: FieldType.radio, + isRequired: false, + order: 2, + options: [ + { value: 'گوشه تیز', order: 1 }, + { value: 'گوشه گرد', order: 2 }, + ], + }, + { + name: 'خط تا', + type: FieldType.checkbox, + isRequired: false, + multiple: true, + order: 3, + options: [ + { value: 'افقی', order: 1 }, + { value: 'عمودی', order: 2 }, + { value: 'زیگزاگ', order: 3 }, + ], + }, + ], + }, + { + title: 'بخش ششم', + order: 6, + fields: [ + { + name: 'نیاز به طراحی', + type: FieldType.radio, + isRequired: true, + order: 1, + options: [ + { value: 'بله', order: 1 }, + { value: 'خیر', order: 2 }, + ], + }, + { + name: 'فرمت فایل', + type: FieldType.select, + isRequired: false, + order: 2, + options: [ + { value: 'PDF', order: 1 }, + { value: 'InDesign', order: 2 }, + { value: 'Word', order: 3 }, + { value: 'Illustrator', order: 4 }, + ], + }, + { + name: 'ابعاد فایل نهایی', + type: FieldType.text, + isRequired: false, + order: 3, + }, + { + name: 'توضیحات طراحی', + type: FieldType.textarea, + isRequired: false, + order: 4, + }, + ], + }, + { + title: 'بخش هفتم', + order: 7, + fields: [ + { + name: 'نوع بسته‌بندی', + type: FieldType.select, + isRequired: true, + order: 1, + options: [ + { value: 'کارتن', order: 1 }, + { value: 'نایلون', order: 2 }, + { value: 'پالت', order: 3 }, + { value: 'بسته‌بندی اختصاصی', order: 4 }, + ], + }, + { + name: 'تعداد در هر بسته', + type: FieldType.number, + isRequired: false, + order: 2, + }, + { + name: 'برچسب اختصاصی', + type: FieldType.radio, + isRequired: false, + order: 3, + options: [ + { value: 'بله', order: 1 }, + { value: 'خیر', order: 2 }, + ], + }, + ], + }, + { + title: 'بخش هشتم', + order: 8, + fields: [ + { + name: 'درخواست نمونه', + type: FieldType.radio, + isRequired: false, + order: 1, + options: [ + { value: 'بله', order: 1 }, + { value: 'خیر', order: 2 }, + ], + }, + { + name: 'آدرس تحویل', + type: FieldType.textarea, + isRequired: false, + order: 2, + }, + { + name: 'توضیحات تکمیلی', + type: FieldType.textarea, + isRequired: false, + order: 3, + }, + { + name: 'شماره تماس هماهنگی', + type: FieldType.text, + isRequired: false, + order: 4, + }, + ], + }, +]; diff --git a/src/seeders/print-form.seeder.ts b/src/seeders/print-form.seeder.ts new file mode 100644 index 0000000..044fb69 --- /dev/null +++ b/src/seeders/print-form.seeder.ts @@ -0,0 +1,47 @@ +import type { EntityManager } from '@mikro-orm/core'; +import { PrintForm } from '../modules/print-form/entities/print-form.entity'; +import { Field } from 'src/modules/form-builder/entities/field.entity'; +import { FieldOption } from 'src/modules/form-builder/entities/field-option.entity'; +import { EntityType } from 'src/modules/form-builder/interface/print'; +import { printFormSectionsData } from './data/print-form.data'; + +export class PrintFormSeeder { + async run(em: EntityManager): Promise { + for (const sectionData of printFormSectionsData) { + const section = em.create(PrintForm, { + title: sectionData.title, + order: sectionData.order, + }); + + em.persist(section); + + for (const fieldData of sectionData.fields) { + const field = em.create(Field, { + name: fieldData.name, + type: fieldData.type, + isRequired: fieldData.isRequired, + order: fieldData.order, + multiple: fieldData.multiple ?? false, + entityType: EntityType.printForm, + entityId: section.id, + }); + + em.persist(field); + + if (fieldData.options?.length) { + for (const optionData of fieldData.options) { + const option = em.create(FieldOption, { + value: optionData.value, + order: optionData.order, + field, + }); + + em.persist(option); + } + } + } + } + + await em.flush(); + } +}