mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-17 12:42:17 +00:00
refactor(server): centralize session busy mapping (#27473)
This commit is contained in:
parent
e76cf967e6
commit
78015571bf
2 changed files with 10 additions and 9 deletions
|
|
@ -1,7 +1,13 @@
|
|||
import type { NotFoundError as StorageNotFoundError } from "@/storage/storage"
|
||||
import type { Session } from "@/session/session"
|
||||
import { Effect } from "effect"
|
||||
import { HttpApiError } from "effect/unstable/httpapi"
|
||||
import * as ApiError from "../errors"
|
||||
|
||||
export function mapStorageNotFound<A, R>(self: Effect.Effect<A, StorageNotFoundError, R>) {
|
||||
return self.pipe(Effect.mapError((error) => ApiError.notFound(error.message)))
|
||||
}
|
||||
|
||||
export function mapBusy<A, R>(self: Effect.Effect<A, Session.BusyError, R>) {
|
||||
return self.pipe(Effect.catchTag("SessionBusyError", () => Effect.fail(new HttpApiError.BadRequest({}))))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,11 +58,6 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||
const bus = yield* Bus.Service
|
||||
const scope = yield* Scope.Scope
|
||||
|
||||
const mapBusy = <A, R>(
|
||||
effect: Effect.Effect<A, Session.BusyError, R>,
|
||||
): Effect.Effect<A, HttpApiError.BadRequest, R> =>
|
||||
effect.pipe(Effect.catchTag("SessionBusyError", () => Effect.fail(new HttpApiError.BadRequest({}))))
|
||||
|
||||
const list = Effect.fn("SessionHttpApi.list")(function* (ctx: { query: typeof ListQuery.Type }) {
|
||||
return yield* session.list({
|
||||
directory: ctx.query.scope === "project" ? undefined : ctx.query.directory,
|
||||
|
|
@ -334,7 +329,7 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||
payload: typeof ShellPayload.Type
|
||||
}) {
|
||||
yield* requireSession(ctx.params.sessionID)
|
||||
return yield* mapBusy(promptSvc.shell({ ...ctx.payload, sessionID: ctx.params.sessionID }))
|
||||
return yield* SessionError.mapBusy(promptSvc.shell({ ...ctx.payload, sessionID: ctx.params.sessionID }))
|
||||
})
|
||||
|
||||
const revert = Effect.fn("SessionHttpApi.revert")(function* (ctx: {
|
||||
|
|
@ -342,12 +337,12 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||
payload: typeof RevertPayload.Type
|
||||
}) {
|
||||
yield* requireSession(ctx.params.sessionID)
|
||||
return yield* mapBusy(revertSvc.revert({ sessionID: ctx.params.sessionID, ...ctx.payload }))
|
||||
return yield* SessionError.mapBusy(revertSvc.revert({ sessionID: ctx.params.sessionID, ...ctx.payload }))
|
||||
})
|
||||
|
||||
const unrevert = Effect.fn("SessionHttpApi.unrevert")(function* (ctx: { params: { sessionID: SessionID } }) {
|
||||
yield* requireSession(ctx.params.sessionID)
|
||||
return yield* mapBusy(revertSvc.unrevert({ sessionID: ctx.params.sessionID }))
|
||||
return yield* SessionError.mapBusy(revertSvc.unrevert({ sessionID: ctx.params.sessionID }))
|
||||
})
|
||||
|
||||
const permissionRespond = Effect.fn("SessionHttpApi.permissionRespond")(function* (ctx: {
|
||||
|
|
@ -363,7 +358,7 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||
params: { sessionID: SessionID; messageID: MessageID }
|
||||
}) {
|
||||
yield* requireSession(ctx.params.sessionID)
|
||||
yield* mapBusy(runState.assertNotBusy(ctx.params.sessionID))
|
||||
yield* SessionError.mapBusy(runState.assertNotBusy(ctx.params.sessionID))
|
||||
yield* session.removeMessage(ctx.params)
|
||||
return true
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue