chore: upload parte 1 - logica
DevSecOps Enterprise Pipeline / security-gate-and-deploy (push) Failing after 41s

This commit is contained in:
2026-06-01 15:35:53 +01:00
parent a63625d228
commit 9c14a19a87
127 changed files with 22255 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
import { NextResponse } from "next/server";
import { getDb } from "@/lib/db";
export async function GET() {
try {
const sql = getDb();
const [componentStats, productStats, lowStockItems, categoryBreakdown, recentOrders, orderStats] =
await Promise.all([
sql(`
SELECT
COUNT(*) as total_components,
COALESCE(SUM(stock_quantity * unit_price), 0) as total_inventory_value,
COUNT(CASE WHEN stock_quantity <= min_stock_level THEN 1 END) as low_stock_count
FROM components
`),
sql(`
SELECT
COUNT(*) as total_products,
COUNT(CASE WHEN status = 'active' THEN 1 END) as active_products,
COUNT(CASE WHEN status = 'draft' THEN 1 END) as draft_products
FROM products
`),
sql(`
SELECT c.*, cat.name as category_name
FROM components c
LEFT JOIN categories cat ON c.category_id = cat.id
WHERE c.stock_quantity <= c.min_stock_level
ORDER BY (c.stock_quantity::float / GREATEST(c.min_stock_level, 1)) ASC
LIMIT 20
`),
sql(`
SELECT cat.name, COUNT(c.id) as count, COALESCE(SUM(c.stock_quantity), 0) as total_stock
FROM categories cat
LEFT JOIN components c ON cat.id = c.category_id
GROUP BY cat.id, cat.name
ORDER BY count DESC
`),
sql(`
SELECT po.id, po.po_number, po.status, po.order_date, po.due_date,
po.customer_id,
c.name AS customer_name, c.code AS customer_code,
COALESCE(SUM(poi.quantity), 0) AS total_ordered,
COALESCE(SUM(poi.shipped_quantity), 0) AS total_shipped,
COALESCE(SUM(poi.quantity), 0) - COALESCE(SUM(poi.shipped_quantity), 0) AS total_remaining,
COALESCE(SUM(poi.quantity * poi.unit_price), 0) AS total_value,
COUNT(poi.id) AS item_count
FROM purchase_orders po
JOIN customers c ON c.id = po.customer_id
LEFT JOIN purchase_order_items poi ON poi.purchase_order_id = po.id
WHERE po.status NOT IN ('completed', 'cancelled')
GROUP BY po.id, po.po_number, po.status, po.order_date, po.due_date, po.customer_id, c.name, c.code
ORDER BY
CASE po.status
WHEN 'in_production' THEN 1
WHEN 'confirmed' THEN 2
WHEN 'shipped' THEN 3
WHEN 'draft' THEN 4
END,
po.due_date ASC NULLS LAST,
po.order_date DESC
LIMIT 15
`),
sql(`
SELECT
COUNT(*) AS total_orders,
COUNT(CASE WHEN status NOT IN ('completed', 'cancelled') THEN 1 END) AS active_orders,
COUNT(CASE WHEN status = 'in_production' THEN 1 END) AS in_production,
COUNT(CASE WHEN status = 'confirmed' THEN 1 END) AS confirmed,
COUNT(CASE WHEN status = 'shipped' THEN 1 END) AS shipped
FROM purchase_orders
`),
]);
return NextResponse.json({
stats: {
total_components: Number(componentStats[0].total_components),
total_inventory_value: Number(componentStats[0].total_inventory_value),
low_stock_count: Number(componentStats[0].low_stock_count),
total_products: Number(productStats[0].total_products),
active_products: Number(productStats[0].active_products),
draft_products: Number(productStats[0].draft_products),
active_orders: Number(orderStats[0].active_orders),
in_production_orders: Number(orderStats[0].in_production),
confirmed_orders: Number(orderStats[0].confirmed),
shipped_orders: Number(orderStats[0].shipped),
},
low_stock_items: lowStockItems,
category_breakdown: categoryBreakdown,
recent_orders: recentOrders,
});
} catch (error) {
console.error("[v0] Dashboard API error:", error);
return NextResponse.json(
{ error: "Failed to load dashboard data" },
{ status: 500 }
);
}
}