From ff47687a7b94bb0c1cd39f1064a6137f0b891e71 Mon Sep 17 00:00:00 2001 From: Carson Full Date: Wed, 18 Jun 2025 13:08:50 -0500 Subject: [PATCH 1/2] Ensure date range validation logic runs before report syncing logic --- .../validate-eng-date-overrides-on-project-change.handler.ts | 2 +- ...date-partnership-date-overrides-on-project-change.handler.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/engagement/handlers/validate-eng-date-overrides-on-project-change.handler.ts b/src/components/engagement/handlers/validate-eng-date-overrides-on-project-change.handler.ts index bd7395236a..df09d26af0 100644 --- a/src/components/engagement/handlers/validate-eng-date-overrides-on-project-change.handler.ts +++ b/src/components/engagement/handlers/validate-eng-date-overrides-on-project-change.handler.ts @@ -3,7 +3,7 @@ import { EventsHandler, type IEventHandler } from '~/core'; import { ProjectUpdatedEvent } from '../../project/events'; import { EngagementService } from '../engagement.service'; -@EventsHandler(ProjectUpdatedEvent) +@EventsHandler([ProjectUpdatedEvent, 10]) export class ValidateEngDateOverridesOnProjectChangeHandler implements IEventHandler { diff --git a/src/components/partnership/handlers/validate-partnership-date-overrides-on-project-change.handler.ts b/src/components/partnership/handlers/validate-partnership-date-overrides-on-project-change.handler.ts index 8c7ac922bc..075ef35a38 100644 --- a/src/components/partnership/handlers/validate-partnership-date-overrides-on-project-change.handler.ts +++ b/src/components/partnership/handlers/validate-partnership-date-overrides-on-project-change.handler.ts @@ -5,7 +5,7 @@ import { OrganizationLoader } from '../../organization'; import { ProjectUpdatedEvent } from '../../project/events'; import { PartnershipService } from '../partnership.service'; -@EventsHandler(ProjectUpdatedEvent) +@EventsHandler([ProjectUpdatedEvent, 10]) export class ValidatePartnershipDateOverridesOnProjectChangeHandler implements IEventHandler { From 5958c20f9e348111e463580a11cddd5030562f76 Mon Sep 17 00:00:00 2001 From: Carson Full Date: Thu, 19 Jun 2025 08:15:43 -0500 Subject: [PATCH 2/2] Add some temporary debug code for this invalid date range log --- ...c-progress-report-to-engagement.handler.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/components/periodic-report/handlers/sync-progress-report-to-engagement.handler.ts b/src/components/periodic-report/handlers/sync-progress-report-to-engagement.handler.ts index 2ddf09617c..7a7cb6bf10 100644 --- a/src/components/periodic-report/handlers/sync-progress-report-to-engagement.handler.ts +++ b/src/components/periodic-report/handlers/sync-progress-report-to-engagement.handler.ts @@ -1,3 +1,4 @@ +import { Settings } from 'luxon'; import { DateInterval, type UnsecuredDto } from '~/common'; import { EventsHandler, type IEventHandler, ILogger, Logger } from '~/core'; import { EngagementService } from '../../engagement'; @@ -89,12 +90,33 @@ export class SyncProgressReportToEngagementDateRange : [event.engagement]; for (const engagement of engagements) { + Settings.throwOnInvalid = false; const [updated, prev] = event instanceof ProjectUpdatedEvent ? this.intervalsFromProjectChange(engagement, event) : event instanceof EngagementCreatedEvent ? [engagementRange(event.engagement), null] - : [engagementRange(event.updated), engagementRange(event.previous)]; + : [ + engagementRange(event.updated), // + engagementRange(event.previous), + ]; + Settings.throwOnInvalid = true; + if (prev && !prev.isValid) { + this.logger.error('Found invalid date range for event', { + eventType: event.constructor.name, + diffSide: 'before', + event, + }); + throw new Error('Invalid engagement date range'); + } + if (updated && !updated.isValid) { + this.logger.error('Found invalid date range for event', { + eventType: event.constructor.name, + diffSide: 'after', + event, + }); + throw new Error('Invalid engagement date range'); + } const diff = this.diffBy(updated, prev, 'quarter');