Files
ai-wave-02/apps/api/src/orders/cancel-order.ts
T
2026-09-03 22:02:52 +09:00

38 lines
1.1 KiB
TypeScript

import type { DatabaseContext } from "../db/database";
import { canCancelOrder } from "./order-status";
import { appendAuditEvent, findOrderDetail, updateOrderStatus } from "./order-repository";
export async function cancelOrder(
context: DatabaseContext,
input: {
orderId: string;
actor: string;
reason?: string;
}
) {
const order = await findOrderDetail(context, input.orderId);
if (!order) {
return { statusCode: 404, message: "Order not found." } as const;
}
if (!canCancelOrder(order.status)) {
return { statusCode: 400, message: "Order cannot be cancelled for this order status." } as const;
}
const updatedAt = new Date().toISOString();
await updateOrderStatus(context, input.orderId, "cancelled", updatedAt);
await appendAuditEvent(context, {
orderId: input.orderId,
actor: input.actor,
type: "order.cancelled",
message: input.reason?.trim() ? `Cancelled order. Reason: ${input.reason.trim()}` : "Cancelled order.",
createdAt: updatedAt
});
return {
statusCode: 200,
order: await findOrderDetail(context, input.orderId)
} as const;
}