1import * as Fly from "@/Fly";
2import * as Effect from "effect/Effect";
3import RpcUsers from "./rpc-users.ts";
4
5export const ORDERS = [
6 { id: "o1", userId: "u1", item: "keyboard" },
7 { id: "o2", userId: "u2", item: "monitor" },
8];
9
10/** Private Service that calls {@link RpcUsers} through a binding. */
11export default class RpcOrders extends Fly.Service<RpcOrders>()(
12 "RpcOrders",
13 Effect.gen(function* () {
14 return {
15 main: import.meta.url,
16 region: "iad",
17 public: false,
18 network: yield* Fly.stackNetwork,
19 guest: { cpuKind: "shared" as const, cpus: 1, memoryMb: 256 },
20 };
21 }),
22 Effect.gen(function* () {
23 const users = yield* Fly.bindService(RpcUsers);
24 return {
25 listOrders: () =>
26 Effect.forEach(ORDERS, (order) =>
27 users
28 .getUser(order.userId)
29 .pipe(Effect.map((user) => ({ ...order, user }))),
30 ),
31 };
32 }),
33) {}