x
This commit is contained in:
1 parent
570810acdb
commit
64bcd6388a
5 files changed
+917
-30
No files matched your search
@@ -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"],
|
||||
},
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user