Skip to content

Commit 12a182f

Browse files
authored
Replace FOD memberships on open projects when a FieldRegion's zone changes (#3495)
1 parent 0174c13 commit 12a182f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { EventsHandler, ILogger, Logger, ResourceLoader } from '~/core';
2+
import { FieldRegionUpdatedEvent } from '../../../field-region/events/field-region-updated.event';
3+
import { ProjectMemberRepository } from '../project-member.repository';
4+
5+
@EventsHandler(FieldRegionUpdatedEvent)
6+
export class RegionsZoneChangesAppliesDirectorChangeToProjectMembersHandler {
7+
constructor(
8+
private readonly repo: ProjectMemberRepository,
9+
private readonly resources: ResourceLoader,
10+
@Logger('project:members') private readonly logger: ILogger,
11+
) {}
12+
13+
async handle(event: FieldRegionUpdatedEvent) {
14+
const oldZoneId = event.previous.fieldZone.id;
15+
const newZoneId = event.input.fieldZoneId;
16+
if (!newZoneId) {
17+
return;
18+
}
19+
const [oldZone, newZone] = await Promise.all([
20+
this.resources.load('FieldZone', oldZoneId),
21+
this.resources.load('FieldZone', newZoneId),
22+
]);
23+
const oldDirector = oldZone.director.value;
24+
const newDirector = newZone.director.value;
25+
if (!oldDirector || !newDirector) {
26+
// Shouldn't really happen. I think everyone can see zones & directors rn.
27+
throw new Error(
28+
'Cannot read field zone directors to apply project membership changes',
29+
);
30+
}
31+
32+
const stats = await this.repo.replaceMembershipsOnOpenProjects(
33+
oldDirector.id,
34+
newDirector.id,
35+
'FieldOperationsDirector',
36+
);
37+
38+
this.logger.notice(
39+
"FieldRegion's zone changed - Replaced FOD director memberships on open projects",
40+
{
41+
location: event.updated.id,
42+
oldZone: oldZoneId,
43+
newZone: newZoneId,
44+
oldDirector: oldDirector.id,
45+
newDirector: newDirector.id,
46+
...stats,
47+
},
48+
);
49+
}
50+
}

src/components/project/project-member/project-member.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { UserModule } from '../../user/user.module';
55
import { ProjectModule } from '../project.module';
66
import { AvailableRolesToProjectResolver } from './available-roles-to-project.resolver';
77
import { DirectorChangeApplyToProjectMembersHandler } from './handlers/director-change-apply-to-project-members.handler';
8+
import { RegionsZoneChangesAppliesDirectorChangeToProjectMembersHandler } from './handlers/regions-zone-changes-applies-director-change-to-project-members.handler';
89
import { AddInactiveAtMigration } from './migrations/add-inactive-at.migration';
910
import { ProjectMemberGelRepository } from './project-member.gel.repository';
1011
import { ProjectMemberLoader } from './project-member.loader';
@@ -26,6 +27,7 @@ import { ProjectMemberService } from './project-member.service';
2627
ProjectMemberLoader,
2728
AddInactiveAtMigration,
2829
DirectorChangeApplyToProjectMembersHandler,
30+
RegionsZoneChangesAppliesDirectorChangeToProjectMembersHandler,
2931
],
3032
exports: [ProjectMemberService],
3133
})

0 commit comments

Comments
 (0)