From aabe0b5fed4e5b78bd5da9e2997bedc4c21fa939 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sat, 31 Jan 2026 12:47:37 +0330 Subject: [PATCH] form builder --- .../controller/form-builder.controller.ts | 8 +++++++ .../form-builder/dto/find-field-group.dto.ts | 12 ++++++++++ .../form-builder/provider/field.service.ts | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/modules/form-builder/dto/find-field-group.dto.ts diff --git a/src/modules/form-builder/controller/form-builder.controller.ts b/src/modules/form-builder/controller/form-builder.controller.ts index 207760f..10c1b05 100644 --- a/src/modules/form-builder/controller/form-builder.controller.ts +++ b/src/modules/form-builder/controller/form-builder.controller.ts @@ -7,6 +7,7 @@ import { CreateFieldOptionDto } from '../dto/create-field-option.dto'; import { FieldOptionService } from '../provider/field-option.service'; import { UpdateFieldDto } from '../dto/update-field.dto'; import { UpdateFieldOptionDto } from '../dto/update-field-option.dto'; +import { FindFieldsGroupDto } from '../dto/find-field-group.dto'; @Controller() @ApiBearerAuth() @@ -39,6 +40,13 @@ export class FormBuilderController { return this.fieldService.findAll(+entityId); } + @Get('admin/entity/group/field') + @ApiOperation({ summary: 'find fields of array of entities' }) + @UseGuards(AdminAuthGuard) + findAllEntityFields(@Body() dto: FindFieldsGroupDto) { + return this.fieldService.findAllByIds(dto); + } + @Get('admin/entity/field/:id') @ApiOperation({ summary: 'Find one field' }) @UseGuards(AdminAuthGuard) diff --git a/src/modules/form-builder/dto/find-field-group.dto.ts b/src/modules/form-builder/dto/find-field-group.dto.ts new file mode 100644 index 0000000..13773e9 --- /dev/null +++ b/src/modules/form-builder/dto/find-field-group.dto.ts @@ -0,0 +1,12 @@ +import { IsArray, IsNotEmpty, IsNumber } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class FindFieldsGroupDto { + + @IsNotEmpty() + @IsArray() + @IsNumber({}, { each: true }) + @ApiProperty() + entityIds: number[] + +} diff --git a/src/modules/form-builder/provider/field.service.ts b/src/modules/form-builder/provider/field.service.ts index dc0bc70..2c85010 100644 --- a/src/modules/form-builder/provider/field.service.ts +++ b/src/modules/form-builder/provider/field.service.ts @@ -10,6 +10,7 @@ import { Product } from 'src/modules/product/entities/product.entity'; import { Print } from 'src/modules/print/entities/print.entity'; import { ProductService } from 'src/modules/product/providers/product.service'; import { PrintService } from 'src/modules/print/provider/Print.service'; +import { FindFieldsGroupDto } from '../dto/find-field-group.dto'; @Injectable() @@ -78,6 +79,29 @@ export class FieldService { { populate: ['options'] }); } + async findAllByIds(dto: FindFieldsGroupDto) { + const fields = await this.fieldRepository.find({ + entityId: { $in: dto.entityIds } + }, + { populate: ['options'] }, + ); + + // const fieldMap = new Map(fields.map(f => [f.entityId, f])) + + const result: { entityId: number, fields: Field[] }[] = [] + + fields.forEach(field => { + if (!result.find((r => r.entityId == Number(field.entityId)))) { + result.push({ + entityId: Number(field.entityId), + fields: fields.filter(f => f.entityId == field.entityId) + }) + } + }) + + return result + } + async findById(fieldId: number): Promise { const field = await this.fieldRepository.findOne({ id: fieldId }, { populate: [] });