chore: upload parte 1 - logica
DevSecOps Enterprise Pipeline / security-gate-and-deploy (push) Failing after 41s
DevSecOps Enterprise Pipeline / security-gate-and-deploy (push) Failing after 41s
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { getDb } from "@/lib/db";
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
const sql = getDb();
|
||||
const { searchParams } = new URL(request.url);
|
||||
const search = searchParams.get("search") || "";
|
||||
const category = searchParams.get("category") || "";
|
||||
const lowStock = searchParams.get("lowStock") === "true";
|
||||
const supplierName = searchParams.get("supplier_name") || "";
|
||||
|
||||
let query = `
|
||||
SELECT c.*, cat.name as category_name,
|
||||
cust.name as customer_name,
|
||||
COALESCE((
|
||||
SELECT SUM(spi.quantity - spi.received_quantity)
|
||||
FROM supplier_po_items spi
|
||||
JOIN supplier_pos sp ON sp.id = spi.supplier_po_id
|
||||
WHERE spi.component_id = c.id
|
||||
AND sp.status IN ('ordered', 'partially_received')
|
||||
AND spi.quantity > spi.received_quantity
|
||||
), 0)::int AS on_order
|
||||
FROM components c
|
||||
LEFT JOIN categories cat ON c.category_id = cat.id
|
||||
LEFT JOIN customers cust ON c.customer_id = cust.id
|
||||
WHERE 1=1
|
||||
`;
|
||||
const params: (string | number)[] = [];
|
||||
|
||||
if (search) {
|
||||
params.push(`%${search}%`, `%${search}%`, `%${search}%`);
|
||||
query += ` AND (c.name ILIKE $${params.length - 2} OR c.part_number ILIKE $${params.length - 1} OR c.manufacturer ILIKE $${params.length})`;
|
||||
}
|
||||
|
||||
if (category) {
|
||||
params.push(Number(category));
|
||||
query += ` AND c.category_id = $${params.length}`;
|
||||
}
|
||||
|
||||
if (lowStock) {
|
||||
query += ` AND c.stock_quantity <= c.min_stock_level`;
|
||||
}
|
||||
|
||||
if (supplierName) {
|
||||
params.push(supplierName);
|
||||
query += ` AND c.supplier = $${params.length}`;
|
||||
}
|
||||
|
||||
query += ` ORDER BY c.updated_at DESC`;
|
||||
|
||||
const rows = await sql(query, params);
|
||||
return NextResponse.json(rows);
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
const sql = getDb();
|
||||
const body = await request.json();
|
||||
const {
|
||||
part_number,
|
||||
name,
|
||||
description,
|
||||
category_id,
|
||||
manufacturer,
|
||||
package_type,
|
||||
unit_price,
|
||||
stock_quantity,
|
||||
min_stock_level,
|
||||
datasheet_url,
|
||||
supplier,
|
||||
supplier_part_number,
|
||||
shelf_location,
|
||||
is_internal,
|
||||
customer_supplied,
|
||||
customer_id,
|
||||
specs,
|
||||
} = body;
|
||||
|
||||
const rows = await sql(
|
||||
`INSERT INTO components (part_number, name, description, category_id, manufacturer, package_type, unit_price, stock_quantity, min_stock_level, datasheet_url, supplier, supplier_part_number, shelf_location, is_internal, customer_supplied, customer_id, specs)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)
|
||||
RETURNING *`,
|
||||
[
|
||||
part_number,
|
||||
name,
|
||||
description || null,
|
||||
category_id || null,
|
||||
manufacturer || null,
|
||||
package_type || null,
|
||||
unit_price || 0,
|
||||
stock_quantity || 0,
|
||||
min_stock_level || 0,
|
||||
datasheet_url || null,
|
||||
supplier || null,
|
||||
supplier_part_number || null,
|
||||
shelf_location || null,
|
||||
is_internal ?? false,
|
||||
customer_supplied ?? false,
|
||||
customer_supplied ? (customer_id || null) : null,
|
||||
JSON.stringify(specs || {}),
|
||||
]
|
||||
);
|
||||
|
||||
return NextResponse.json(rows[0], { status: 201 });
|
||||
}
|
||||
Reference in New Issue
Block a user