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); } }