From 0f022dba65ca4a797f51c369b34502bfb3db88a3 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Fri, 22 May 2026 10:50:55 +0530 Subject: [PATCH 1/2] Added End date Support in Survey Creation --- src/common/utils/response-messages.ts | 1 + src/modules/response/services/response.service.ts | 10 ++++++++++ src/modules/survey/dto/create-survey.dto.ts | 9 +++++++++ src/modules/survey/entities/survey.entity.ts | 3 +++ src/modules/survey/services/survey.service.ts | 2 ++ 5 files changed, 25 insertions(+) diff --git a/src/common/utils/response-messages.ts b/src/common/utils/response-messages.ts index 9e19cd47..9bc705b4 100644 --- a/src/common/utils/response-messages.ts +++ b/src/common/utils/response-messages.ts @@ -26,6 +26,7 @@ export const RESPONSE_MESSAGES = { RESPONSE_NOT_FOUND: 'Response not found', RESPONSE_ALREADY_SUBMITTED: 'Response already submitted', RESPONSE_NOT_ACCEPTING: 'Survey is not accepting responses', + SURVEY_EXPIRED: 'Survey has expired and is no longer accepting responses', RESPONSE_DUPLICATE_SUBMISSION: 'You have already submitted a response to this survey', RESPONSE_CANNOT_UPDATE: 'Cannot update a submitted response', RESPONSE_VALIDATION_FAILED: 'Validation failed', diff --git a/src/modules/response/services/response.service.ts b/src/modules/response/services/response.service.ts index aae0acbf..81932aaf 100644 --- a/src/modules/response/services/response.service.ts +++ b/src/modules/response/services/response.service.ts @@ -57,6 +57,16 @@ export class ResponseService { throw new BadRequestException(RESPONSE_MESSAGES.RESPONSE_NOT_ACCEPTING); } + if (survey.endDate && new Date() > new Date(survey.endDate)) { + this.loggerService.error( + 'BAD_REQUEST', + RESPONSE_MESSAGES.SURVEY_EXPIRED, + apiId, + userId, + ); + throw new BadRequestException(RESPONSE_MESSAGES.SURVEY_EXPIRED); + } + // Validate contextId is provided when survey requires a context entity const requiresContext = survey.contextType && survey.contextType !== SurveyContextType.NONE && diff --git a/src/modules/survey/dto/create-survey.dto.ts b/src/modules/survey/dto/create-survey.dto.ts index 1a7e2c96..b97e9dca 100644 --- a/src/modules/survey/dto/create-survey.dto.ts +++ b/src/modules/survey/dto/create-survey.dto.ts @@ -9,6 +9,7 @@ import { Min, MaxLength, IsNotEmpty, + IsDateString, } from 'class-validator'; import { Type } from 'class-transformer'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; @@ -156,6 +157,14 @@ export class CreateSurveyDto { @IsEnum(SurveyContextType) context_type?: SurveyContextType; + @ApiPropertyOptional({ + description: 'Date after which the survey can no longer be filled (ISO 8601)', + example: '2026-12-31T23:59:59.000Z', + }) + @IsOptional() + @IsDateString() + end_date?: string; + @ApiPropertyOptional({ type: [CreateSectionDto] }) @IsOptional() @IsArray() diff --git a/src/modules/survey/entities/survey.entity.ts b/src/modules/survey/entities/survey.entity.ts index d29f8f20..53f7a917 100644 --- a/src/modules/survey/entities/survey.entity.ts +++ b/src/modules/survey/entities/survey.entity.ts @@ -87,4 +87,7 @@ export class Survey { @Column({ name: 'closedAt', type: 'timestamp with time zone', nullable: true }) closedAt: Date; + + @Column({ name: 'endDate', type: 'timestamp with time zone', nullable: true }) + endDate: Date; } diff --git a/src/modules/survey/services/survey.service.ts b/src/modules/survey/services/survey.service.ts index bc8a3e58..0bd9e88d 100644 --- a/src/modules/survey/services/survey.service.ts +++ b/src/modules/survey/services/survey.service.ts @@ -58,6 +58,7 @@ export class SurveyService { theme: dto.theme || {}, targetRoles: dto.target_roles || null, contextType: dto.context_type || SurveyContextType.NONE, + endDate: dto.end_date ? new Date(dto.end_date) : null, createdBy: userId, updatedBy: userId, status: SurveyStatus.DRAFT, @@ -303,6 +304,7 @@ export class SurveyService { theme: dto.theme ?? survey.theme, targetRoles: dto.target_roles !== undefined ? (dto.target_roles || null) : survey.targetRoles, contextType: dto.context_type ?? survey.contextType, + endDate: dto.end_date !== undefined ? (dto.end_date ? new Date(dto.end_date) : null) : survey.endDate, version: survey.version + 1, }); From f35c79a58c4e9f88c49d9698e8065399c8f31f5f Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Fri, 22 May 2026 11:02:42 +0530 Subject: [PATCH 2/2] Build Issue resolved --- src/modules/survey/services/survey.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/survey/services/survey.service.ts b/src/modules/survey/services/survey.service.ts index 0bd9e88d..3953710b 100644 --- a/src/modules/survey/services/survey.service.ts +++ b/src/modules/survey/services/survey.service.ts @@ -58,7 +58,7 @@ export class SurveyService { theme: dto.theme || {}, targetRoles: dto.target_roles || null, contextType: dto.context_type || SurveyContextType.NONE, - endDate: dto.end_date ? new Date(dto.end_date) : null, + endDate: dto.end_date ? new Date(dto.end_date) : undefined, createdBy: userId, updatedBy: userId, status: SurveyStatus.DRAFT,