Skip to content

Commit 971ff12

Browse files
Eldowmlipscombe
authored andcommitted
add nested updates support
1 parent 1c7be67 commit 971ff12

File tree

2 files changed

+68
-6
lines changed

2 files changed

+68
-6
lines changed

src/PostgraphileNestedMutationsPlugin.js

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
6666
pgQueryFromResolveData: queryFromResolveData,
6767
pgNestedPluginForwardInputTypes,
6868
pgNestedPluginReverseInputTypes,
69-
pgNestedResolvers,
69+
pgNestedCreateResolvers,
70+
pgNestedUpdateResolvers,
7071
pgNestedTableConnectorFields,
7172
pgNestedTableConnect,
7273
pgNestedTableDeleterFields,
@@ -97,7 +98,7 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
9798
!pgNestedPluginForwardInputTypes[table.id] &&
9899
!pgNestedPluginReverseInputTypes[table.id]
99100
) {
100-
pgNestedResolvers[table.id] = field.resolve;
101+
pgNestedCreateResolvers[table.id] = field.resolve;
101102
return field;
102103
}
103104

@@ -207,7 +208,7 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
207208

208209
if (fieldValue.create) {
209210
const createData = fieldValue.create;
210-
const resolver = pgNestedResolvers[foreignTable.id];
211+
const resolver = pgNestedCreateResolvers[foreignTable.id];
211212
const tableVar = inflection.tableFieldName(foreignTable);
212213

213214
const insertData = Object.assign(
@@ -232,6 +233,35 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
232233
resolveResult.data[`__pk__${k.name}`];
233234
});
234235
}
236+
237+
await Promise.all(Object.keys(fieldValue).map(async k => {
238+
if (k.includes('updateBy')) {
239+
const rowData = fieldValue[k]
240+
const resolver = pgNestedUpdateResolvers[foreignTable.id];
241+
242+
const updateData = Object.assign(
243+
{},
244+
rowData,
245+
await recurseForwardNestedMutations(
246+
data,
247+
{ input: rowData },
248+
{ pgClient },
249+
resolveInfo,
250+
),
251+
);
252+
253+
const resolveResult = await resolver(
254+
data,
255+
{ input: updateData },
256+
{ pgClient },
257+
resolveInfo,
258+
);
259+
foreignKeys.forEach((k, idx) => {
260+
output[inflection.column(keys[idx])] =
261+
resolveResult.data[`__pk__${k.name}`];
262+
});
263+
}
264+
}))
235265
}),
236266
);
237267

@@ -580,7 +610,7 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
580610
if (fieldValue.create) {
581611
await Promise.all(
582612
fieldValue.create.map(async (rowData) => {
583-
const resolver = pgNestedResolvers[foreignTable.id];
613+
const resolver = pgNestedCreateResolvers[foreignTable.id];
584614
const tableVar = inflection.tableFieldName(foreignTable);
585615

586616
const keyData = {};
@@ -610,6 +640,33 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
610640
}),
611641
);
612642
}
643+
644+
await Promise.all(Object.keys(fieldValue).map(async k => {
645+
if (k.includes('updateBy')) {
646+
await Promise.all(
647+
fieldValue[k].map(async (rowData) => {
648+
const resolver = pgNestedUpdateResolvers[foreignTable.id];
649+
650+
const { data: reverseRow } = await resolver(
651+
data,
652+
{
653+
input: Object.assign({}, rowData),
654+
},
655+
{ pgClient },
656+
resolveInfo,
657+
);
658+
659+
const rowKeyValues = {};
660+
if (primaryKeys) {
661+
primaryKeys.forEach((k) => {
662+
rowKeyValues[k.name] = reverseRow[`__pk__${k.name}`];
663+
});
664+
}
665+
modifiedRows.push(rowKeyValues);
666+
}),
667+
);
668+
}
669+
}))
613670
}),
614671
);
615672

@@ -655,7 +712,11 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
655712
};
656713

657714
if (isPgCreateMutationField) {
658-
pgNestedResolvers[table.id] = newResolver;
715+
pgNestedCreateResolvers[table.id] = newResolver;
716+
}
717+
718+
if (isPgUpdateMutationField) {
719+
pgNestedUpdateResolvers[table.id] = newResolver;
659720
}
660721

661722
return Object.assign({}, field, { resolve: newResolver });

src/PostgraphileNestedTypesPlugin.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ module.exports = function PostGraphileNestedTypesPlugin(
4141
return extend(build, {
4242
pgNestedPluginForwardInputTypes: {},
4343
pgNestedPluginReverseInputTypes: {},
44-
pgNestedResolvers: {},
44+
pgNestedCreateResolvers: {},
45+
pgNestedUpdateResolvers: {},
4546
pgNestedFieldName(options) {
4647
const {
4748
constraint: {

0 commit comments

Comments
 (0)