@@ -93,6 +93,8 @@ export class PartnerRepository extends DtoRepository(Partner) {
93
93
fieldRegions : [ 'FieldRegion' , input . fieldRegions ] ,
94
94
countries : [ 'Location' , input . countries ] ,
95
95
languagesOfConsulting : [ 'Language' , input . languagesOfConsulting ] ,
96
+ strategicAlliances : [ 'Partner' , input . strategicAlliances ] ,
97
+ parent : [ 'Partner' , input . parentId ] ,
96
98
} ) ,
97
99
)
98
100
. apply ( departmentIdBlockUtils . createMaybe ( input . departmentIdBlock ) )
@@ -118,11 +120,23 @@ export class PartnerRepository extends DtoRepository(Partner) {
118
120
countries,
119
121
languagesOfConsulting,
120
122
departmentIdBlock,
123
+ strategicAlliances,
124
+ parentId,
121
125
...simpleChanges
122
126
} = changes ;
123
127
124
128
await this . updateProperties ( { id } , simpleChanges ) ;
125
129
130
+ if ( parentId !== undefined ) {
131
+ if ( parentId === id ) {
132
+ throw new InputException (
133
+ 'A partner cannot be its own parent organization' ,
134
+ 'partner.parent' ,
135
+ ) ;
136
+ }
137
+ await this . updateRelation ( 'parent' , 'Partner' , changes . id , parentId ) ;
138
+ }
139
+
126
140
if ( pointOfContactId !== undefined ) {
127
141
await this . updateRelation (
128
142
'pointOfContact' ,
@@ -169,6 +183,26 @@ export class PartnerRepository extends DtoRepository(Partner) {
169
183
}
170
184
}
171
185
186
+ if ( strategicAlliances ) {
187
+ if ( strategicAlliances . includes ( changes . id ) ) {
188
+ throw new InputException (
189
+ 'A partner cannot be its own strategic ally' ,
190
+ 'partner.strategicAlliances' ,
191
+ ) ;
192
+ }
193
+ try {
194
+ await this . updateRelationList ( {
195
+ id : changes . id ,
196
+ relation : 'strategicAlliances' ,
197
+ newList : strategicAlliances ,
198
+ } ) ;
199
+ } catch ( e ) {
200
+ throw e instanceof InputException
201
+ ? e . withField ( 'partner.strategicAlliances' )
202
+ : e ;
203
+ }
204
+ }
205
+
172
206
if ( languagesOfConsulting ) {
173
207
try {
174
208
await this . updateRelationList ( {
@@ -257,6 +291,26 @@ export class PartnerRepository extends DtoRepository(Partner) {
257
291
) ,
258
292
) ,
259
293
)
294
+ . subQuery ( 'node' , ( sub ) =>
295
+ sub
296
+ . match ( [
297
+ node ( 'node' ) ,
298
+ relation ( 'out' , '' , 'strategicAlliances' ) ,
299
+ node ( 'strategicAlliances' , 'Partner' ) ,
300
+ ] )
301
+ . return (
302
+ collect ( 'strategicAlliances { .id }' ) . as ( 'strategicAlliances' ) ,
303
+ ) ,
304
+ )
305
+ . subQuery ( 'node' , ( sub ) =>
306
+ sub
307
+ . optionalMatch ( [
308
+ node ( 'node' ) ,
309
+ relation ( 'out' , '' , 'parent' , ACTIVE ) ,
310
+ node ( 'parent' , 'Partner' ) ,
311
+ ] )
312
+ . return ( 'parent { .id } as parent' ) ,
313
+ )
260
314
. apply ( matchProps ( ) )
261
315
. optionalMatch ( [
262
316
node ( 'node' ) ,
@@ -288,6 +342,8 @@ export class PartnerRepository extends DtoRepository(Partner) {
288
342
departmentIdBlock : 'departmentIdBlock' ,
289
343
scope : 'scopedRoles' ,
290
344
pinned,
345
+ parent : 'parent { .id }' ,
346
+ strategicAlliances : 'strategicAlliances' ,
291
347
} ) . as ( 'dto' ) ,
292
348
) ;
293
349
}
0 commit comments