Files
PrintAuftrag-Portfolio/frontend/components/upload-form/orderUpdateBillbee.ts
Andreas Wilms f12cc8b2ce init
2025-09-08 18:30:35 +02:00

121 lines
3.1 KiB
TypeScript

"use server";
const API_KEY = process.env.BILLBEE_API_KEY as string;
const USERNAME = process.env.BILLBEE_USERNAME as string;
const API_PASSWORD = process.env.BILLBEE_PASSWORD as string;
const BASE_URL = "https://api.billbee.io/api/v1";
export interface OrderData {
Bestellnummer: string | null;
Sendungsnummer: string | null;
}
export interface RespError {
orderId: string | null;
error: string;
}
async function addShipment(orderId: string, shippingId: string) {
const url = `${BASE_URL}/orders/${orderId}/shipment`;
const headers: HeadersInit = {
"X-Billbee-Api-Key": API_KEY,
accept: "application/json",
"Content-Type": "application/json",
Authorization: "Basic " + btoa(`${USERNAME}:${API_PASSWORD}`),
};
const payload = {
ShippingId: shippingId,
ShippingProviderId: 6082,
ShipmentType: 0,
};
const response = await fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload),
credentials: "include", // Include credentials for basic auth
});
if (!response.ok) {
throw new Error(`Error ${response.status}: ${await response.text()}`);
}
// Update order status
const updateUrl = `${BASE_URL}/orders/${orderId}/orderstate`;
const updatePayload = {
NewStateId: 4,
};
const updateResponse = await fetch(updateUrl, {
method: "PUT",
headers: headers,
body: JSON.stringify(updatePayload),
credentials: "include",
});
if (!updateResponse.ok) {
throw new Error(
`Error updating order status ${
updateResponse.status
}: ${await updateResponse.text()}`
);
}
}
async function getByExternalId(externalId: string) {
const url = `${BASE_URL}/orders/findbyextref/${externalId}`;
const headers: HeadersInit = {
"X-Billbee-Api-Key": API_KEY,
accept: "application/json",
Authorization: "Basic " + btoa(`${USERNAME}:${API_PASSWORD}`),
};
const response = await fetch(url, {
method: "GET",
headers: headers,
credentials: "include",
});
if (!response.ok) {
throw new Error(`Error ${response.status}: ${await response.text()}`);
}
return await response.json();
}
async function updateCompleteShipment(orderId: string, shippingId: string) {
const res = await getByExternalId(orderId);
const content = res.Data;
const billbeeId = content.BillBeeOrderId;
await addShipment(billbeeId, shippingId);
}
export async function main(data: OrderData[]) {
const errors: RespError[] = [];
for (const { Bestellnummer, Sendungsnummer } of data) {
if (!Bestellnummer || !Sendungsnummer) {
errors.push({
orderId: Bestellnummer,
error: "Order ID or Shipping ID is None",
});
continue;
}
try {
await updateCompleteShipment(Bestellnummer, Sendungsnummer);
} catch (e) {
const errorMessage = e instanceof Error ? e.message : "Unknown error";
console.error(`Error processing order ${Bestellnummer}: ${errorMessage}`);
errors.push({ orderId: Bestellnummer, error: errorMessage });
}
}
const result = {
successful: data.length - errors.length,
errors: errors,
};
return result;
}