@goatlab/fluent 0.6.18 → 0.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadRelations = void 0;
4
4
  const js_utils_1 = require("@goatlab/js-utils");
5
- const loadRelations = async ({ data, relations, modelRelations, dataSource, provider, self }) => {
5
+ const loadRelations = async ({ data, relations, modelRelations, provider, self, returnPivot }) => {
6
6
  if (!relations) {
7
7
  return data;
8
8
  }
@@ -12,11 +12,11 @@ const loadRelations = async ({ data, relations, modelRelations, dataSource, prov
12
12
  const relationModel = modelRelations[relation];
13
13
  const Model = new relations[relation]();
14
14
  if (relationModel.isOneToMany) {
15
- const ids = js_utils_1.Arrays.deDuplicate(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
16
- const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
15
+ const ids = new Set(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
16
+ const chunks = js_utils_1.Arrays.chunk(Array.from(ids), chunkSize);
17
17
  const promises = [];
18
18
  for (const relatedIds of chunks) {
19
- const results = await Model.andWhere(Model._keys[relationModel.inverseSidePropertyPath], 'in', relatedIds).get();
19
+ const results = await Model.andWhere(keys => keys[relationModel.inverseSidePropertyPath], 'in', relatedIds).get();
20
20
  promises.push(results);
21
21
  }
22
22
  const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
@@ -32,7 +32,7 @@ const loadRelations = async ({ data, relations, modelRelations, dataSource, prov
32
32
  const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
33
33
  const promises = [];
34
34
  for (const relatedIds of chunks) {
35
- const results = await Model.andWhere(Model._keys.id, 'in', relatedIds).get();
35
+ const results = await Model.andWhere(keys => keys.id, 'in', relatedIds).get();
36
36
  promises.push(results);
37
37
  }
38
38
  const relatedResults = js_utils_1.Arrays.collapse(promises);
@@ -54,7 +54,7 @@ const loadRelations = async ({ data, relations, modelRelations, dataSource, prov
54
54
  const promises = [];
55
55
  for (const pivotIds of chunks) {
56
56
  const results = await pivotRepository
57
- .where(relationModel.joinColumns[0].propertyName, 'in', pivotIds)
57
+ .where(k => k[relationModel.joinColumns[0].propertyName], 'in', pivotIds)
58
58
  .get();
59
59
  promises.push(results);
60
60
  }
@@ -63,16 +63,28 @@ const loadRelations = async ({ data, relations, modelRelations, dataSource, prov
63
63
  const relationChunks = js_utils_1.Arrays.chunk(uniquePivotIds, chunkSize);
64
64
  const relationPromises = [];
65
65
  for (const relatedIds of relationChunks) {
66
- const results = await Model.andWhere(Model._keys.id, 'in', relatedIds).get();
66
+ const results = await Model.andWhere(keys => keys.id, 'in', relatedIds).get();
67
67
  relationPromises.push(results);
68
68
  }
69
- const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(relationPromises));
69
+ let relatedResults = js_utils_1.Arrays.collapse(await Promise.all(relationPromises));
70
+ const pivotInverseKey = relationModel.inverseJoinColumns[0].propertyName;
71
+ relatedResults = relatedResults.map(r => {
72
+ return {
73
+ ...r,
74
+ pivot: pivotResults.find(p => p[pivotInverseKey] === r.id)
75
+ };
76
+ });
70
77
  const groupedPivot = js_utils_1.Arrays.groupBy(pivotResults, r => r[relationModel.joinColumns[0].propertyName]);
71
78
  const groupedRelated = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
72
79
  data.forEach(d => {
73
80
  groupedPivot[d.id]?.forEach(gp => {
74
- d[relationModel.propertyPath] =
75
- groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]];
81
+ if (!d[relationModel.propertyPath]) {
82
+ d[relationModel.propertyPath] = [];
83
+ }
84
+ d[relationModel.propertyPath] = [
85
+ ...d[relationModel.propertyPath],
86
+ ...groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]]
87
+ ];
76
88
  });
77
89
  });
78
90
  }