Skip to content

Commit 3147d9d

Browse files
authored
Optimize Project/Engagement updates without date changes (#3395)
2 parents f8f6131 + 5249bd6 commit 3147d9d

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

src/components/budget/handlers/sync-budget-records-to-funding-partners.handler.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,17 @@ export class SyncBudgetRecordsToFundingPartners
7070
// Partnership was not funding, so do nothing.
7171
return;
7272
}
73+
if (
74+
event instanceof ProjectUpdatedEvent &&
75+
event.changes.mouStart === undefined &&
76+
event.changes.mouEnd === undefined
77+
) {
78+
// Project dates haven't changed, so do nothing.
79+
return;
80+
}
7381

74-
const projectId = await this.determineProjectId(event);
75-
const changeset = await this.determineChangeset(event);
82+
const projectId = this.determineProjectId(event);
83+
const changeset = this.determineChangeset(event);
7684

7785
// Fetch budget & only continue if it is pending
7886
const budget = await this.budgetRepo.listRecordsForSync(
@@ -88,7 +96,7 @@ export class SyncBudgetRecordsToFundingPartners
8896
}
8997
}
9098

91-
private async determineProjectId(event: SubscribedEvent) {
99+
private determineProjectId(event: SubscribedEvent) {
92100
if (event instanceof ProjectUpdatedEvent) {
93101
return event.updated.id;
94102
}
@@ -98,7 +106,7 @@ export class SyncBudgetRecordsToFundingPartners
98106
return event.partnership.project.id;
99107
}
100108

101-
private async determineChangeset(event: SubscribedEvent) {
109+
private determineChangeset(event: SubscribedEvent) {
102110
if (event instanceof ProjectUpdatedEvent) {
103111
return event.updated.changeset;
104112
}

src/components/engagement/engagement.service.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ export class EngagementService {
167167
);
168168
}
169169

170-
const { methodology: _, ...maybeChanges } = input;
170+
const { methodology, ...maybeChanges } = input;
171171
const changes = this.repo.getActualLanguageChanges(object, maybeChanges);
172172
this.privileges
173173
.for(session, LanguageEngagement, object)
@@ -182,8 +182,15 @@ export class EngagementService {
182182
changeset,
183183
);
184184

185-
const event = new EngagementUpdatedEvent(updated, previous, input, session);
186-
await this.eventBus.publish(event);
185+
const event = new EngagementUpdatedEvent(
186+
updated,
187+
previous,
188+
{ id: object.id, methodology, ...changes },
189+
session,
190+
);
191+
if (Object.keys(changes).length > 0) {
192+
await this.eventBus.publish(event);
193+
}
187194

188195
return this.secure(event.updated, session) as LanguageEngagement;
189196
}
@@ -218,8 +225,15 @@ export class EngagementService {
218225
changeset,
219226
);
220227

221-
const event = new EngagementUpdatedEvent(updated, previous, input, session);
222-
await this.eventBus.publish(event);
228+
const event = new EngagementUpdatedEvent(
229+
updated,
230+
previous,
231+
{ id: object.id, ...changes },
232+
session,
233+
);
234+
if (Object.keys(changes).length > 0) {
235+
await this.eventBus.publish(event);
236+
}
223237

224238
return this.secure(event.updated, session) as InternshipEngagement;
225239
}

src/components/periodic-report/handlers/sync-progress-report-to-engagement.handler.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,23 @@ export class SyncProgressReportToEngagementDateRange
5050
return;
5151
}
5252

53+
if (
54+
event instanceof ProjectUpdatedEvent &&
55+
event.changes.mouStart === undefined &&
56+
event.changes.mouEnd === undefined
57+
) {
58+
// Project dates haven't changed, so do nothing.
59+
return;
60+
}
61+
if (
62+
event instanceof EngagementUpdatedEvent &&
63+
event.input.startDateOverride === undefined &&
64+
event.input.endDateOverride === undefined
65+
) {
66+
// Engagement dates haven't changed, so do nothing.
67+
return;
68+
}
69+
5370
if (
5471
(event instanceof EngagementCreatedEvent && event.engagement.changeset) ||
5572
(event instanceof EngagementUpdatedEvent && event.updated.changeset)

src/components/project/events/project-updated.event.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export class ProjectUpdatedEvent {
55
constructor(
66
public updated: UnsecuredDto<Project>,
77
readonly previous: UnsecuredDto<Project>,
8-
readonly updates: UpdateProject,
8+
readonly changes: UpdateProject,
99
readonly session: Session,
1010
) {}
1111
}

src/components/project/project.service.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,9 @@ export class ProjectService {
286286
this.privileges
287287
.for(session, resolveProjectType(currentProject), currentProject)
288288
.verifyChanges(changes, { pathPrefix: 'project' });
289+
if (!changedStep && Object.keys(changes).length === 0) {
290+
return await this.readOneUnsecured(input.id, session, changeset);
291+
}
289292

290293
let updated = currentProject;
291294
if (changedStep) {
@@ -333,7 +336,7 @@ export class ProjectService {
333336
const event = new ProjectUpdatedEvent(
334337
updated,
335338
currentProject,
336-
input,
339+
{ id: updated.id, ...changes },
337340
session,
338341
);
339342
await this.eventBus.publish(event);

src/repl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as fs from 'fs/promises';
66
// eslint-disable-next-line no-restricted-imports
77
import * as lodash from 'lodash';
88
import { DateTime, Duration, Interval } from 'luxon';
9-
import { CalendarDate, DateInterval, many, maybeMany } from '~/common';
9+
import { CalendarDate, DateInterval } from '~/common';
1010
import * as common from '~/common';
1111
import './polyfills';
1212

@@ -34,8 +34,8 @@ runRepl({
3434
Interval,
3535
CalendarDate,
3636
DateInterval,
37-
many,
38-
maybeMany,
37+
now: DateTime.now,
38+
today: CalendarDate.now,
3939
common: { ...commonLib, ...common },
4040
scripture,
4141
...lodash.pick(scripture, 'Book', 'Chapter', 'Verse'),

0 commit comments

Comments
 (0)