Skip to content

Commit b125b29

Browse files
committed
api: Fix deleting issue copies
1 parent 58c232c commit b125b29

File tree

1 file changed

+66
-50
lines changed
  • packages/api/services/collection/issues

1 file changed

+66
-50
lines changed

packages/api/services/collection/issues/index.ts

Lines changed: 66 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -237,60 +237,76 @@ const addOrChangeCopies = async (
237237
purchaseIds: (number | null)[],
238238
labelIds: (number[] | undefined)[]
239239
): Promise<TransactionResults> => {
240-
const operations = issueIds.map((issueId, copyNumber) => {
241-
if (issueId && conditions[copyNumber] === null) {
242-
return prismaDm.issue.delete({
243-
where: { id: issueId },
244-
});
245-
}
246-
247-
const common = {
248-
condition: conditions[copyNumber]!,
249-
purchaseId: purchaseIds[copyNumber] || -2,
250-
};
251-
252-
const createInput = {
253-
...common,
254-
issuecode,
240+
let operations = [], deleteOperations = [];
241+
const previousIssueIds = await prismaDm.issue.findMany({
242+
where: {
255243
userId,
256-
creationDate: new Date(),
257-
};
258-
const updateInput = {
259-
...common,
260-
labels: {
261-
deleteMany: {},
262-
},
263-
};
264-
console.log("upsert", {
265-
create: createInput,
266-
update: updateInput,
267-
where: { id: issueId || 0 },
268-
});
269-
return prismaDm.issue.upsert({
270-
create: createInput,
271-
update: updateInput,
272-
where: {
273-
id: issueId || 0,
274-
},
275-
});
244+
issuecode,
245+
},
276246
});
277-
const upsertResults = await prismaDm.$transaction(operations);
278-
const newIssueLabelsOperations = upsertResults
279-
.map((result, copyNumber) => ({ result, copyNumber }))
280-
.filter(({ result }) => "id" in result)
281-
.map(({ result: { id: issueId }, copyNumber }) =>
282-
prismaDm.issueLabel.createMany({
283-
data:
284-
labelIds[copyNumber]?.map((labelId) => ({
285-
labelId,
286-
issueId,
287-
})) || [],
288-
})
289-
);
290-
await prismaDm.$transaction(newIssueLabelsOperations);
247+
const deletedIssueIds = previousIssueIds.filter(({ id }) => !issueIds.includes(id));
248+
if (deletedIssueIds.length) {
249+
deleteOperations = deletedIssueIds.map(({ id }) => prismaDm.issue.delete({
250+
where: { id },
251+
}));
252+
await prismaDm.$transaction(deleteOperations);
253+
}
254+
if (issueIds.length) {
255+
operations = issueIds.map((issueId, copyNumber) => {
256+
if (issueId && conditions[copyNumber] === null) {
257+
return prismaDm.issue.delete({
258+
where: { id: issueId },
259+
});
260+
}
261+
262+
const common = {
263+
condition: conditions[copyNumber]!,
264+
purchaseId: purchaseIds[copyNumber] || -2,
265+
};
266+
267+
const createInput = {
268+
...common,
269+
issuecode,
270+
userId,
271+
creationDate: new Date(),
272+
};
273+
const updateInput = {
274+
...common,
275+
labels: {
276+
deleteMany: {},
277+
},
278+
};
279+
console.log("upsert", {
280+
create: createInput,
281+
update: updateInput,
282+
where: { id: issueId || 0 },
283+
});
284+
return prismaDm.issue.upsert({
285+
create: createInput,
286+
update: updateInput,
287+
where: {
288+
id: issueId || 0,
289+
},
290+
});
291+
});
292+
const upsertResults = await prismaDm.$transaction(operations);
293+
const newIssueLabelsOperations = upsertResults
294+
.map((result, copyNumber) => ({ result, copyNumber }))
295+
.filter(({ result }) => "id" in result)
296+
.map(({ result: { id: issueId }, copyNumber }) =>
297+
prismaDm.issueLabel.createMany({
298+
data:
299+
labelIds[copyNumber]?.map((labelId) => ({
300+
labelId,
301+
issueId,
302+
})) || [],
303+
})
304+
);
305+
await prismaDm.$transaction(newIssueLabelsOperations);
306+
}
291307

292308
return {
293-
operations: operations.length,
309+
operations: operations.length + deleteOperations.length,
294310
};
295311
};
296312

0 commit comments

Comments
 (0)