add print form seeder
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-07-03 16:30:08 +03:30
parent c6c2f09205
commit 9ae6a5b730
4 changed files with 416 additions and 8 deletions
-2
View File
@@ -1,7 +1,5 @@
// export const AUTH_THROTTLE = "AUTH_THROTTLE"; // export const AUTH_THROTTLE = "AUTH_THROTTLE";
export const AI_CONFIG = 'AI_CONFIG';
export const MIKRO_ORM_QUERY_LOGGER = 'MIKRO_ORM_QUERY_LOGGER'; 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_TTL = 1 * 60 * 1000;
export const AUTH_THROTTLE_LIMIT = 5; export const AUTH_THROTTLE_LIMIT = 5;
export const AUTH__REFRESH_THROTTLE_TTL = 10 * 60 * 1000; export const AUTH__REFRESH_THROTTLE_TTL = 10 * 60 * 1000;
+13 -6
View File
@@ -9,6 +9,7 @@ import { CategoriesSeeder } from './categories.seeder';
import { ProductsFieldsSeeder } from './product-fields.seeder'; import { ProductsFieldsSeeder } from './product-fields.seeder';
import { FieldOption } from 'src/modules/form-builder/entities/field-option.entity'; import { FieldOption } from 'src/modules/form-builder/entities/field-option.entity';
import { FieldOptionSeeder } from './field-options.seeder'; import { FieldOptionSeeder } from './field-options.seeder';
import { PrintFormSeeder } from './print-form.seeder';
// import { AttributesSeeder } from './attribute.seeder'; // import { AttributesSeeder } from './attribute.seeder';
// import { AttributeValueSeeder } from './attribute-value.seeder'; // import { AttributeValueSeeder } from './attribute-value.seeder';
@@ -16,7 +17,7 @@ import { FieldOptionSeeder } from './field-options.seeder';
export class DatabaseSeeder extends Seeder { export class DatabaseSeeder extends Seeder {
async run(em: EntityManager) { async run(em: EntityManager) {
const TOTAL_STEPS = 15; const TOTAL_STEPS = 16;
console.info('[Seeder] Starting database seed'); console.info('[Seeder] Starting database seed');
// 1. Create Permissions // 1. Create Permissions
console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`); console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`);
@@ -57,13 +58,19 @@ export class DatabaseSeeder extends Seeder {
await fieldOptionsSeeder.run(em); await fieldOptionsSeeder.run(em);
console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`); console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`);
// 12. Create Admins // 12. Create print form sections and fields
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating admins`); console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating print form sections`);
const adminsSeeder = new AdminsSeeder(); const printFormSeeder = new PrintFormSeeder();
await adminsSeeder.run(em, rolesMap); await printFormSeeder.run(em);
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`); 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`); // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating users`);
// const usersSeeder = new UsersSeeder(); // const usersSeeder = new UsersSeeder();
// await usersSeeder.run(em); // await usersSeeder.run(em);
+356
View File
@@ -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,
},
],
},
];
+47
View File
@@ -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<void> {
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();
}
}