51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { Client, Environment } from "squareup"
|
|
|
|
const client = new Client({
|
|
accessToken: process.env.SQUARE_ACCESS_TOKEN,
|
|
environment: process.env.SQUARE_ENVIRONMENT === "production" ? Environment.Production : Environment.Sandbox,
|
|
})
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const { items, customerInfo } = await request.json()
|
|
|
|
const ordersApi = client.ordersApi
|
|
|
|
const orderRequest = {
|
|
order: {
|
|
locationId: process.env.SQUARE_LOCATION_ID,
|
|
lineItems: items.map((item: any) => ({
|
|
name: item.name,
|
|
quantity: item.quantity.toString(),
|
|
basePriceMoney: {
|
|
amount: BigInt(item.price * 100),
|
|
currency: "USD",
|
|
},
|
|
note: item.description || "",
|
|
})),
|
|
metadata: {
|
|
customerName: customerInfo.name,
|
|
customerEmail: customerInfo.email,
|
|
customerPhone: customerInfo.phone || "",
|
|
shippingAddress: JSON.stringify(customerInfo.address || {}),
|
|
},
|
|
},
|
|
idempotencyKey: crypto.randomUUID(),
|
|
}
|
|
|
|
const response = await ordersApi.createOrder(orderRequest)
|
|
|
|
if (response.result.order) {
|
|
return Response.json({
|
|
success: true,
|
|
order: response.result.order,
|
|
})
|
|
} else {
|
|
throw new Error("Failed to create order")
|
|
}
|
|
} catch (error) {
|
|
console.error("Square order creation error:", error)
|
|
return Response.json({ success: false, error: "Failed to create order" }, { status: 500 })
|
|
}
|
|
}
|