This commit is contained in:
Your Name committed 2026-10-15 06:56:21 +07:00
1 parent 570810acdb
commit 64bcd6388a
5 files changed
+917 -30

No files matched your search

+28 -4
View File
@@ -1,6 +1,7 @@
import { Elysia, t } from "elysia";
import type { Prisma } from "@prisma/client";
import prisma from "../lib/prisma";
import { purgeProducts } from "../lib/catalogMaintenance";
import { localizeProductAttribute } from "../lib/productAttributes";
import {
createCustomProductDetailSection,
@@ -1036,7 +1037,7 @@ export const productsRoute = new Elysia({ prefix: "/products" })
)
.delete(
"/:id",
async ({ params, status }) => {
async ({ params, query, status }) => {
const id = parseInt(params.id);
if (isNaN(id)) return status(400, { success: false, message: "Invalid product ID" });
@@ -1049,6 +1050,15 @@ export const productsRoute = new Elysia({ prefix: "/products" })
return status(404, { success: false, message: "Product not found" });
}
const hard = (query as any)?.hard === 'true' || (query as any)?.purge === 'true';
if (hard) {
await prisma.$transaction(async (tx) => {
await purgeProducts(tx, [id]);
});
return { success: true, hardDeleted: true, message: "Product hard-deleted successfully" };
}
await prisma.product.update({
where: { id },
data: {
@@ -1061,14 +1071,14 @@ export const productsRoute = new Elysia({ prefix: "/products" })
},
{
detail: {
summary: "Soft Delete Product",
summary: "Delete Product (Soft or Hard via ?hard=true)",
tags: ["products"],
},
}
)
.post(
"/bulk-delete",
async ({ body, status }) => {
async ({ body, query, status }) => {
const { ids } = body as { ids?: number[] };
if (!Array.isArray(ids) || ids.length === 0) {
return status(400, { success: false, message: "Invalid or empty IDs array" });
@@ -1079,6 +1089,20 @@ export const productsRoute = new Elysia({ prefix: "/products" })
return status(400, { success: false, message: "No valid IDs provided" });
}
const hard = (query as any)?.hard === 'true' || (query as any)?.purge === 'true';
if (hard) {
const result = await prisma.$transaction(async (tx) => {
return await purgeProducts(tx, validIds);
});
return {
success: true,
count: result.count,
hardDeleted: true,
message: `Successfully hard-deleted ${result.count} products`,
};
}
const result = await prisma.product.updateMany({
where: { id: { in: validIds } },
data: {
@@ -1098,7 +1122,7 @@ export const productsRoute = new Elysia({ prefix: "/products" })
ids: t.Array(t.Numeric()),
}),
detail: {
summary: "Bulk Soft Delete Products",
summary: "Bulk Delete Products (Soft or Hard via ?hard=true)",
tags: ["products"],
},
}