async function getAllChildren(
prisma: PrismaClient,
tag?: Prisma.TagGetPayload<object>
): Promise<Prisma.TagGetPayload<object>[]> {
if (!tag) return [];
const childrenTags = await prisma.tag.findMany({
where: { parentId: tag.id },
});
const subTags = (
await Promise.all(childrenTags.map((tag) => getAllChildren(prisma, tag)))
).flat();
return [tag, ...subTags];
}
const allTags = await getAllChildren(
prisma,
await prisma.tag.findUnique({
where: { id: request.params.tagId },
})
);
const tagsIds = allTags.map((t) => t.id);
return prisma.tag.deleteMany({
where: {
id: { in: tagsIds },
},
});
async function getAllChildren(
prisma: PrismaClient,
tag?: Prisma.TagGetPayload<object>
): Promise<Prisma.TagGetPayload<object>[]> {
if (!tag) return [];
const childrenTags = await prisma.tag.findMany({
where: { parentId: tag.id },
});
const subTags = (
await Promise.all(childrenTags.map((tag) => getAllChildren(prisma, tag)))
).flat();
return [tag, ...subTags];
}
const allTags = await getAllChildren(
prisma,
await prisma.tag.findUnique({
where: { id: request.params.tagId },
})
);
const tagsIds = allTags.map((t) => t.id);
return prisma.tag.deleteMany({
where: {
id: { in: tagsIds },
},
});