Files
negareh-api/src/modules/form-builder/controller/form-builder.controller.ts
T
2026-02-05 10:08:37 +03:30

117 lines
4.2 KiB
TypeScript

import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard';
import { FieldService } from '../provider/field.service';
import { CreateFieldDto } from '../dto/create-field.dto';
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';
import { Permissions } from 'src/common/decorators/permissions.decorator';
import { PermissionEnum } from 'src/common/enums/permission.enum';
@Controller()
@ApiBearerAuth()
export class FormBuilderController {
constructor(
private readonly fieldService: FieldService,
private readonly fieldOptionService: FieldOptionService,
) { }
/*================================ Field ========================== */
@Get('public/entity/:id/field')
@ApiOperation({ summary: 'find all fields' })
findAllSectionFieldsAsUser(@Param('id') entityId: string) {
return this.fieldService.findAll(entityId);
}
// ============= Admin =================
@Post('admin/entity/:id/field')
@ApiOperation({ summary: 'Create field for entity' })
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
@UseGuards(AdminAuthGuard)
createField(@Body() dto: CreateFieldDto, @Param('id') entityId: string) {
return this.fieldService.create(entityId, dto);
}
@Get('admin/entity/:id/field')
@ApiOperation({ summary: 'find all fields' })
@UseGuards(AdminAuthGuard)
findAllSectionFields(@Param('id') entityId: string) {
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)
findOneFiled(@Param('id') id: string) {
return this.fieldService.findById(id);
}
@Patch('admin/entity/field/:id')
@ApiOperation({ summary: 'Update field' })
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
updateField(@Param('id') id: string, @Body() dto: UpdateFieldDto) {
return this.fieldService.update(id, dto);
}
@Delete('admin/entity/field/:id')
@ApiOperation({ summary: 'Remove field' })
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
removeField(@Param('id') id: string) {
return this.fieldService.remove(id);
}
/*================================ Field Option ========================== */
@Post('admin/entity/field/:id/option')
@ApiOperation({ summary: 'Create field Options ' })
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
createFieldOption(@Body() dto: CreateFieldOptionDto, @Param('id') id: string) {
return this.fieldOptionService.create(id, dto);
}
@Get('admin/entity/field/:id/option')
@ApiOperation({ summary: 'find all field Option' })
@UseGuards(AdminAuthGuard)
findAllFiledOptions(@Param('id') fieldId: string) {
return this.fieldOptionService.findAll(fieldId);
}
@Get('admin/entity/field/option/:id')
@ApiOperation({ summary: 'Find one field Option' })
@UseGuards(AdminAuthGuard)
findOneFiledOption(@Param('id') id: string) {
return this.fieldOptionService.findById(id);
}
@Patch('admin/entity/field/option/:id')
@ApiOperation({ summary: 'Update field Option' })
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
updateFieldOption(@Param('id') id: string, @Body() dto: UpdateFieldOptionDto) {
return this.fieldOptionService.update(id, dto);
}
@Delete('admin/entity/field/option/:id')
@ApiOperation({ summary: 'Renopve field Option' })
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.MANAGE_FORM_BUILDER)
removeFieldOption(@Param('id') id: string) {
return this.fieldOptionService.remove(id);
}
}