Skip to content

Commit 99e3be3

Browse files
Munksgaardjuliendangers
authored andcommitted
DeleteOthers before inserting new rows
This is supposed to fix an issue where a unique requirement on a column prohibits inserting new rows before the old rows have been deleted. Fixes mlipscombe#15
1 parent d2a7c5e commit 99e3be3

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

src/PostgraphileNestedMutationsPlugin.js

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -520,40 +520,7 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
520520
);
521521
}),
522522
);
523-
524-
if (fieldValue.create) {
525-
await Promise.all(
526-
fieldValue.create.map(async (rowData) => {
527-
const resolver = pgNestedResolvers[foreignTable.id];
528-
const tableVar = inflection.tableFieldName(foreignTable);
529-
530-
const keyData = {};
531-
keys.forEach((k, idx) => {
532-
const columnName = inflection.column(k);
533-
keyData[columnName] = row[foreignKeys[idx].name];
534-
});
535-
536-
const { data: reverseRow } = await resolver(
537-
data,
538-
{
539-
input: {
540-
[tableVar]: Object.assign({}, rowData, keyData),
541-
},
542-
},
543-
{ pgClient },
544-
resolveInfo,
545-
);
546-
547-
const rowKeyValues = {};
548-
if (primaryKeys) {
549-
primaryKeys.forEach((k) => {
550-
rowKeyValues[k.name] = reverseRow[`__pk__${k.name}`];
551-
});
552-
}
553-
modifiedRows.push(rowKeyValues);
554-
}),
555-
);
556-
}
523+
557524
if (fieldValue.deleteOthers) {
558525
// istanbul ignore next
559526
if (!primaryKeys) {
@@ -604,6 +571,40 @@ module.exports = function PostGraphileNestedMutationPlugin(builder) {
604571
} = sql.compile(deleteQuery);
605572
await pgClient.query(deleteQueryText, deleteQueryValues);
606573
}
574+
575+
if (fieldValue.create) {
576+
await Promise.all(
577+
fieldValue.create.map(async (rowData) => {
578+
const resolver = pgNestedResolvers[foreignTable.id];
579+
const tableVar = inflection.tableFieldName(foreignTable);
580+
581+
const keyData = {};
582+
keys.forEach((k, idx) => {
583+
const columnName = inflection.column(k);
584+
keyData[columnName] = row[foreignKeys[idx].name];
585+
});
586+
587+
const { data: reverseRow } = await resolver(
588+
data,
589+
{
590+
input: {
591+
[tableVar]: Object.assign({}, rowData, keyData),
592+
},
593+
},
594+
{ pgClient },
595+
resolveInfo,
596+
);
597+
598+
const rowKeyValues = {};
599+
if (primaryKeys) {
600+
primaryKeys.forEach((k) => {
601+
rowKeyValues[k.name] = reverseRow[`__pk__${k.name}`];
602+
});
603+
}
604+
modifiedRows.push(rowKeyValues);
605+
}),
606+
);
607+
}
607608
}),
608609
);
609610

0 commit comments

Comments
 (0)