diff --git a/src/common/dto/list-query-v2.dto.ts b/src/common/dto/list-query-v2.dto.ts index 0c22ac6..c8c9da9 100644 --- a/src/common/dto/list-query-v2.dto.ts +++ b/src/common/dto/list-query-v2.dto.ts @@ -3,6 +3,7 @@ import { Type } from "class-transformer"; import { IsIn, IsInt, + IsISO8601, IsOptional, IsString, Max, @@ -102,4 +103,20 @@ export class ListQueryV2Dto { @IsOptional() @IsIn([...LIST_FILE_TYPE_V2]) fileType?: ListFileTypeV2; + + @ApiPropertyOptional({ + description: "Filter start date (ISO 8601). Only files created on or after this date are returned.", + example: "2025-01-01T00:00:00.000Z", + }) + @IsOptional() + @IsISO8601({ strict: false }) + startDate?: string; + + @ApiPropertyOptional({ + description: "Filter end date (ISO 8601). Only files created on or before this date are returned.", + example: "2025-12-31T23:59:59.999Z", + }) + @IsOptional() + @IsISO8601({ strict: false }) + endDate?: string; } diff --git a/src/expert-blame/expert-blame.service.ts b/src/expert-blame/expert-blame.service.ts index d0f2073..07377c9 100644 --- a/src/expert-blame/expert-blame.service.ts +++ b/src/expert-blame/expert-blame.service.ts @@ -630,11 +630,21 @@ export class ExpertBlameService { String((d as { publicId?: string }).publicId ?? ""), ), ); - const filtered = this.filterBlameDocsByUnifiedStatus( + let filtered = this.filterBlameDocsByUnifiedStatus( visibleCases, claimByPublicId, query.unifiedStatus, ); + const { fromDate, toDate } = parseListDateRange(query.startDate, query.endDate); + if (fromDate || toDate) { + filtered = filtered.filter((doc) => + isInListDateRange( + (doc as { createdAt?: Date }).createdAt, + fromDate, + toDate, + ), + ); + } const paged = applyListQueryV2( filtered, diff --git a/src/expert-claim/expert-claim.service.ts b/src/expert-claim/expert-claim.service.ts index 80a3d7c..fdbee26 100644 --- a/src/expert-claim/expert-claim.service.ts +++ b/src/expert-claim/expert-claim.service.ts @@ -3748,6 +3748,12 @@ export class ExpertClaimService { (item) => item.unifiedFileStatus === query.unifiedStatus, ); } + const { fromDate, toDate } = parseListDateRange(query.startDate, query.endDate); + if (fromDate || toDate) { + filtered = filtered.filter((item) => + isInListDateRange(item.createdAt, fromDate, toDate), + ); + } const paged = applyListQueryV2( filtered, { diff --git a/src/expert-insurer/expert-insurer.service.ts b/src/expert-insurer/expert-insurer.service.ts index fc72998..0bf526d 100644 --- a/src/expert-insurer/expert-insurer.service.ts +++ b/src/expert-insurer/expert-insurer.service.ts @@ -1334,6 +1334,12 @@ export class ExpertInsurerService { (f) => f.unifiedFileStatus === query.unifiedStatus, ); } + const { fromDate, toDate } = parseListDateRange(query.startDate, query.endDate); + if (fromDate || toDate) { + files = files.filter((f) => + isInListDateRange(f.createdAt, fromDate, toDate), + ); + } const paged = applyListQueryV2( files,