76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
import { sendJson } from '../http.js';
|
|
import { logger } from '../logger.js';
|
|
import { logOrder } from '../order-log.js';
|
|
import { createOrder } from '../queries/create-order.js';
|
|
|
|
export const method = 'POST';
|
|
export const path = '/v1/order';
|
|
|
|
function parseBody(buffer) {
|
|
if (!buffer || !buffer.length) {
|
|
return null;
|
|
}
|
|
try {
|
|
return JSON.parse(buffer.toString('utf8'));
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
function getOrders(body) {
|
|
if (!body || typeof body !== 'object') {
|
|
return [];
|
|
}
|
|
if (Array.isArray(body.orders)) {
|
|
return body.orders;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
export async function handle(req, res) {
|
|
const body = parseBody(req.rawBody);
|
|
|
|
if (body === undefined) {
|
|
return sendJson(res, 500, []);
|
|
}
|
|
|
|
const orders = getOrders(body);
|
|
const results = [];
|
|
|
|
for (const order of orders) {
|
|
logOrder(order);
|
|
const externalOrderId = String(order?.externalId ?? '');
|
|
|
|
try {
|
|
const created = await createOrder(order);
|
|
if (created.alreadyExists) {
|
|
const msg = `order already mapped, skipped save (kAuftrag=${created.orderId}, ${created.orderNumber})`;
|
|
logger.error(`order externalId=${externalOrderId} skipped: ${msg}`);
|
|
results.push({
|
|
status: 'ERROR',
|
|
externalOrderId,
|
|
message: msg,
|
|
});
|
|
} else {
|
|
logger.success(`order ${created.orderNumber} (kAuftrag=${created.orderId}) created for externalId=${externalOrderId}`);
|
|
results.push({
|
|
status: 'OK',
|
|
externalOrderId,
|
|
message: '',
|
|
});
|
|
}
|
|
} catch (err) {
|
|
logger.error(`order externalId=${externalOrderId} failed: ${err.message}`);
|
|
results.push({
|
|
status: 'ERROR',
|
|
externalOrderId,
|
|
message: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
const failed = results.filter((r) => r.status === 'ERROR').length;
|
|
const httpStatus = failed > 0 ? 500 : 200;
|
|
return sendJson(res, httpStatus, results);
|
|
}
|