import { Agent } from "agents";
import { getAgent } from "ayjnt/rpc";
import type InventoryAgent from "../inventory/agent.ts";
import type { GeneratedEnv } from "@ayjnt/env";
type State = { orders: { sku: string; qty: number; remaining: number }[] };
export default class OrdersAgent extends Agent<GeneratedEnv, State> {
override initialState: State = { orders: [] };
override async onRequest(request: Request): Promise<Response> {
if (request.method !== "POST") return Response.json(this.state);
const { sku, qty } = (await request.json()) as { sku: string; qty: number };
try {
const inv = await getAgent<InventoryAgent>(this.env.INVENTORY_AGENT, "main");
const remaining = await inv.decrement(sku, qty); // throws on oversell
this.setState({ orders: [...this.state.orders, { sku, qty, remaining }] });
return Response.json({ ok: true, remaining });
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
return Response.json({ ok: false, error: message }, { status: 409 });
}
}
}