refactor(permission): use effectful HttpApi group builder

Build the permission HttpApi handlers with an effectful group callback so the permission service is resolved once at layer construction time and the endpoint handlers close over the resulting service methods.
This commit is contained in:
Kit Langton
2026-04-14 20:01:26 -04:00
parent 17e1a4d429
commit a91eba5030

View File

@@ -50,26 +50,30 @@ const Api = HttpApi.make("permission")
}),
)
const list = Effect.fn("PermissionHttpApi.list")(function* () {
const svc = yield* Permission.Service
return yield* svc.list()
})
const PermissionLive = HttpApiBuilder.group(
Api,
"permission",
Effect.fn("PermissionHttpApi.handlers")(function* (handlers) {
const svc = yield* Permission.Service
const reply = Effect.fn("PermissionHttpApi.reply")(function* (ctx: {
params: { requestID: PermissionID }
payload: Permission.ReplyBody
}) {
const svc = yield* Permission.Service
yield* svc.reply({
requestID: ctx.params.requestID,
reply: ctx.payload.reply,
message: ctx.payload.message,
})
return true
})
const list = Effect.fn("PermissionHttpApi.list")(function* () {
return yield* svc.list()
})
const PermissionLive = HttpApiBuilder.group(Api, "permission", (handlers) =>
handlers.handle("list", list).handle("reply", reply),
const reply = Effect.fn("PermissionHttpApi.reply")(function* (ctx: {
params: { requestID: PermissionID }
payload: Permission.ReplyBody
}) {
yield* svc.reply({
requestID: ctx.params.requestID,
reply: ctx.payload.reply,
message: ctx.payload.message,
})
return true
})
return handlers.handle("list", list).handle("reply", reply)
}),
)
const web = lazy(() =>