@@ -327,22 +327,24 @@ class SegmentRepository extends RepositoryBase<
327
327
const transaction = this . transaction
328
328
329
329
const records = await this . options . database . sequelize . query (
330
- `SELECT
331
- s.*,
332
- json_agg(sac."activityChannels") AS "activityChannels"
330
+ `
331
+ SELECT
332
+ s.*,
333
+ jsonb_merge_agg(sac."activityChannels") AS "activityChannels"
333
334
FROM segments s
334
335
LEFT JOIN (
335
336
SELECT
336
337
"tenantId",
337
- json_build_object(concat(platform), json_agg(sac.channel)) AS "activityChannels"
338
+ "segmentId",
339
+ jsonb_build_object(platform, json_agg(DISTINCT sac.channel)) AS "activityChannels"
338
340
FROM "segmentActivityChannels" sac
339
341
WHERE "tenantId" = :tenantId
340
- GROUP BY "tenantId", "platform"
341
- ) sac
342
- ON sac."tenantId" = s."tenantId"
342
+ GROUP BY "tenantId", "segmentId", "platform"
343
+ ) sac ON sac."tenantId" = s."tenantId" AND sac."segmentId" = s.id
343
344
WHERE id in (:ids)
344
345
AND s."tenantId" = :tenantId
345
- GROUP BY s.id;` ,
346
+ GROUP BY s.id;
347
+ ` ,
346
348
{
347
349
replacements : {
348
350
ids,
@@ -354,7 +356,10 @@ class SegmentRepository extends RepositoryBase<
354
356
)
355
357
356
358
records . forEach ( ( row ) => {
357
- row . activityChannels = Object . assign ( { } , ...row . activityChannels )
359
+ if ( ! row . activityChannels ) {
360
+ row . activityChannels = { }
361
+ }
362
+ row . activityChannels = { ...row . activityChannels }
358
363
} )
359
364
360
365
return records . map ( ( sr ) => SegmentRepository . populateRelations ( sr ) )
@@ -377,22 +382,24 @@ class SegmentRepository extends RepositoryBase<
377
382
const transaction = this . transaction
378
383
379
384
const records = await this . options . database . sequelize . query (
380
- `SELECT
381
- s.*,
382
- json_agg(sac."activityChannels") AS "activityChannels"
385
+ `
386
+ SELECT
387
+ s.*,
388
+ jsonb_merge_agg(sac."activityChannels") AS "activityChannels"
383
389
FROM segments s
384
390
LEFT JOIN (
385
391
SELECT
386
392
"tenantId",
387
- json_build_object(concat(platform), json_agg(sac.channel)) AS "activityChannels"
393
+ "segmentId",
394
+ jsonb_build_object(platform, json_agg(DISTINCT sac.channel)) AS "activityChannels"
388
395
FROM "segmentActivityChannels" sac
389
396
WHERE "tenantId" = :tenantId
390
- GROUP BY "tenantId", "platform"
391
- ) sac
392
- ON sac."tenantId" = s."tenantId"
397
+ GROUP BY "tenantId", "segmentId", "platform"
398
+ ) sac ON sac."tenantId" = s."tenantId" AND sac."segmentId" = s.id
393
399
WHERE s.id = :id
394
400
AND s."tenantId" = :tenantId
395
- GROUP BY s.id;` ,
401
+ GROUP BY s.id;
402
+ ` ,
396
403
{
397
404
replacements : {
398
405
id,
@@ -408,7 +415,10 @@ class SegmentRepository extends RepositoryBase<
408
415
}
409
416
410
417
const record = records [ 0 ]
411
- record . activityChannels = Object . assign ( { } , ...record . activityChannels )
418
+ if ( ! record . activityChannels ) {
419
+ record . activityChannels = { }
420
+ }
421
+ record . activityChannels = { ...record . activityChannels }
412
422
413
423
if ( SegmentRepository . isProjectGroup ( record ) ) {
414
424
// find projects
@@ -628,17 +638,17 @@ class SegmentRepository extends RepositoryBase<
628
638
SELECT
629
639
COUNT(DISTINCT s.id) AS count,
630
640
s.*,
631
- json_agg (sac."activityChannels") AS "activityChannels"
641
+ jsonb_merge_agg (sac."activityChannels") AS "activityChannels"
632
642
FROM segments s
633
643
LEFT JOIN (
634
644
SELECT
635
645
"tenantId",
636
- json_build_object(concat(platform), json_agg(sac.channel)) AS "activityChannels"
646
+ "segmentId",
647
+ jsonb_build_object(platform, json_agg(sac.channel)) AS "activityChannels"
637
648
FROM "segmentActivityChannels" sac
638
649
WHERE "tenantId" = :tenantId
639
- GROUP BY "tenantId", "platform"
640
- ) sac
641
- ON sac."tenantId" = s."tenantId"
650
+ GROUP BY "tenantId", "segmentId", "platform"
651
+ ) sac ON sac."tenantId" = s."tenantId" AND sac."segmentId" = s.id
642
652
WHERE s."grandparentSlug" IS NOT NULL
643
653
AND s."parentSlug" IS NOT NULL
644
654
AND s."tenantId" = :tenantId
@@ -662,7 +672,6 @@ class SegmentRepository extends RepositoryBase<
662
672
663
673
const rows = subprojects
664
674
rows . forEach ( ( row , i ) => {
665
- rows [ i ] . activityChannels = rows [ i ] . activityChannels [ 0 ]
666
675
if ( rows [ i ] . activityChannels === null ) {
667
676
rows [ i ] . activityChannels = { }
668
677
}
0 commit comments