mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-07-01 08:16:26 +00:00
70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
import { LinkIncludingShortenedCollectionAndTags } from "@linkwarden/types/global";
|
|
import updateLinkById from "../linkId/updateLinkById";
|
|
import { UpdateLinkSchemaType } from "@linkwarden/lib/schemaValidation";
|
|
import { prisma } from "@linkwarden/prisma";
|
|
|
|
export default async function updateLinks(
|
|
userId: number,
|
|
links: { id: number }[],
|
|
removePreviousTags: boolean,
|
|
newData: Pick<
|
|
LinkIncludingShortenedCollectionAndTags,
|
|
"tags" | "collectionId"
|
|
>
|
|
) {
|
|
let allUpdatesSuccessful = true;
|
|
|
|
const ids = links.map((l) => l.id);
|
|
|
|
const dbLinks = await prisma.link.findMany({
|
|
where: { id: { in: ids } },
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
url: true,
|
|
description: true,
|
|
icon: true,
|
|
iconWeight: true,
|
|
color: true,
|
|
collectionId: true,
|
|
collection: { select: { id: true, ownerId: true } },
|
|
tags: { select: { name: true } },
|
|
},
|
|
});
|
|
|
|
// Map id -> link for quick lookup
|
|
const byId = new Map(dbLinks.map((l) => [l.id, l]));
|
|
|
|
for (const l of links) {
|
|
const link = byId.get(l.id);
|
|
|
|
if (!link) continue;
|
|
|
|
const updatedData: UpdateLinkSchemaType = {
|
|
...link,
|
|
tags: [...(newData.tags ?? [])],
|
|
collection: {
|
|
...link.collection,
|
|
id: newData.collectionId ?? link.collection.id,
|
|
},
|
|
};
|
|
|
|
const updatedLink = await updateLinkById(
|
|
userId,
|
|
link.id as number,
|
|
updatedData,
|
|
removePreviousTags
|
|
);
|
|
|
|
if (updatedLink.status !== 200) {
|
|
allUpdatesSuccessful = false;
|
|
}
|
|
}
|
|
|
|
if (allUpdatesSuccessful) {
|
|
return { response: "All links updated successfully", status: 200 };
|
|
} else {
|
|
return { response: "Some links failed to update", status: 400 };
|
|
}
|
|
}
|