diff --git a/src/form/dto/create-form.dto.ts b/src/form/dto/create-form.dto.ts new file mode 100644 index 0000000..0f88ad8 --- /dev/null +++ b/src/form/dto/create-form.dto.ts @@ -0,0 +1,17 @@ +import { ApiPropertyOptional } from "@nestjs/swagger"; +import { IsArray, IsOptional, IsString, ValidateNested } from "class-validator"; +import { CreateFieldDto } from "./create-field.dto"; +import { Type } from "class-transformer"; + +export class CreateFormDto { + @ApiPropertyOptional({ example: 'Customer Feedback Survey' }) + @IsString() + name?: string; + + @ApiPropertyOptional({ type: [CreateFieldDto] }) + @ValidateNested({each:true}) + @Type(() => CreateFieldDto) + @IsArray() + @IsOptional() + fields?: CreateFieldDto[]; +} \ No newline at end of file diff --git a/src/form/dto/create-update.dto.ts b/src/form/dto/create-update.dto.ts deleted file mode 100644 index 8a056d6..0000000 --- a/src/form/dto/create-update.dto.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ApiPropertyOptional } from "@nestjs/swagger"; -import { IsOptional, IsString, ValidateNested } from "class-validator"; -import { CreateFieldDto } from "./create-field.dto"; -import { Type } from "class-transformer"; - -export class CreateUpdateDto { - @ApiPropertyOptional({ example: '550e8400-uuid', description: 'Form ID — omit to create a new form' }) - @IsString() - @IsOptional() - id?: string; - - @ApiPropertyOptional({ example: 'Customer Feedback Survey' }) - @IsString() - @IsOptional() - name?: string; - - @ApiPropertyOptional({ type: CreateFieldDto }) - @ValidateNested() - @Type(() => CreateFieldDto) - @IsOptional() - field?: CreateFieldDto; -} \ No newline at end of file diff --git a/src/form/form.controller.ts b/src/form/form.controller.ts index d602bbc..335712a 100644 --- a/src/form/form.controller.ts +++ b/src/form/form.controller.ts @@ -11,17 +11,17 @@ import { import { FormService } from './form.service'; import { ApiOperation } from '@nestjs/swagger'; import { UpdateFieldDto } from './dto/update-field.dto'; -import { CreateUpdateDto } from './dto/create-update.dto'; import { QueryFormDto } from './dto/query-form.dto'; +import { CreateFormDto } from './dto/create-form.dto'; @Controller('form') export class FormController { constructor(private readonly formService: FormService) {} - @Post('create-or-update') - @ApiOperation({ summary: 'Create Empty Form, Add Field to form' }) - async createOne(@Body() createUpdatedDto: CreateUpdateDto) { - return await this.formService.createOrUpdate(createUpdatedDto); + @Post('create-form') + @ApiOperation({ summary: 'Create a Form'}) + async createOne(@Body() createFormDto:CreateFormDto){ + return await this.formService.createForm(createFormDto) } @Get() diff --git a/src/form/form.service.ts b/src/form/form.service.ts index f1f1235..c29ec70 100644 --- a/src/form/form.service.ts +++ b/src/form/form.service.ts @@ -1,14 +1,18 @@ -import { Injectable, NotFoundException, ServiceUnavailableException } from '@nestjs/common'; +import { + Injectable, + NotFoundException, + ServiceUnavailableException, +} from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Form, FormDocument, Status } from './schemas/form.schema'; import { Model } from 'mongoose'; import { v4 as uuidv4 } from 'uuid'; import { UpdateFieldDto } from './dto/update-field.dto'; -import { CreateUpdateDto } from './dto/create-update.dto'; import { QueryFormDto } from './dto/query-form.dto'; import { FormQueryBuilder } from './helpers/form-query.builder'; import { PaginatedResponse } from 'src/interfaces/paginated-response.interface'; import { LlmService } from 'src/common/services/llm.service'; +import { CreateFormDto } from './dto/create-form.dto'; // Reusable projections const LIST_PROJECTION = { @@ -28,29 +32,12 @@ export class FormService { private llmService: LlmService, ) {} - async createOrUpdate(dto: CreateUpdateDto): Promise