1
- import { DateOverrideConflictException } from '~/common' ;
2
- import { EventsHandler , IEventHandler } from '~/core' ;
1
+ import { mapEntries } from '@seedcompany/common' ;
2
+ import { asNonEmpty , DateOverrideConflictException } from '~/common' ;
3
+ import { EventsHandler , IEventHandler , ResourceLoader } from '~/core' ;
4
+ import { OrganizationLoader } from '../../organization' ;
3
5
import { ProjectUpdatedEvent } from '../../project/events' ;
4
6
import { PartnershipService } from '../partnership.service' ;
5
7
6
8
@EventsHandler ( ProjectUpdatedEvent )
7
9
export class ValidatePartnershipDateOverridesOnProjectChangeHandler
8
10
implements IEventHandler < ProjectUpdatedEvent >
9
11
{
10
- constructor ( private readonly partnerships : PartnershipService ) { }
12
+ constructor (
13
+ private readonly partnerships : PartnershipService ,
14
+ private readonly resources : ResourceLoader ,
15
+ ) { }
11
16
12
17
async handle ( event : ProjectUpdatedEvent ) {
13
18
const { updated : project , changes, session } = event ;
@@ -26,12 +31,31 @@ export class ValidatePartnershipDateOverridesOnProjectChangeHandler
26
31
partnerships . map ( ( partnership ) => ( {
27
32
__typename : 'Partnership' ,
28
33
id : partnership . id ,
29
- label : partnership . id , // TODO
34
+ label : partnership . id ,
30
35
start : partnership . mouStartOverride ,
31
36
end : partnership . mouEndOverride ,
32
37
} ) ) ,
33
38
) ;
34
39
if ( ! conflicts ) return ;
40
+ const orgLoader = await this . resources . getLoader ( OrganizationLoader ) ;
41
+ const partnershipToOrg = mapEntries ( partnerships , ( p ) => [
42
+ p . id ,
43
+ p . organization . id ,
44
+ ] ) . asRecord ;
45
+ const orgs = await orgLoader . loadMany (
46
+ conflicts . map ( ( conflict ) => partnershipToOrg [ conflict . id ] ) ,
47
+ ) ;
48
+ const conflictsWithLabels = conflicts . map ( ( conflict , index ) => {
49
+ const org = orgs [ index ] ;
50
+ if ( org instanceof Error ) {
51
+ // Shouldn't happen
52
+ return conflict ;
53
+ }
54
+ return {
55
+ ...conflict ,
56
+ label : org . name . value ?? conflict . id ,
57
+ } ;
58
+ } ) ;
35
59
throw new DateOverrideConflictException (
36
60
{
37
61
__typename : event . resource . name ,
@@ -40,7 +64,7 @@ export class ValidatePartnershipDateOverridesOnProjectChangeHandler
40
64
} ,
41
65
canonical ,
42
66
[ 'A partnership' , 'Some partnerships' ] ,
43
- conflicts ,
67
+ asNonEmpty ( conflictsWithLabels ) ! ,
44
68
) ;
45
69
}
46
70
}
0 commit comments