Refactor workspace service boundaries (#25152)

This commit is contained in:
Kit Langton
2026-04-30 15:34:37 -04:00
committed by GitHub
parent b315a70773
commit 0e9d9282c6
14 changed files with 433 additions and 417 deletions

View File

@@ -1,6 +1,5 @@
import { Context, Effect, FiberMap, Layer, Schema, Stream } from "effect"
import { FetchHttpClient, HttpBody, HttpClient, HttpClientError, HttpClientRequest } from "effect/unstable/http"
import { fn } from "@/util/fn"
import { Database } from "@/storage/db"
import { asc } from "drizzle-orm"
import { eq } from "drizzle-orm"
@@ -24,7 +23,6 @@ import { Session } from "@/session/session"
import { SessionTable } from "@/session/session.sql"
import { SessionID } from "@/session/schema"
import { errorData } from "@/util/error"
import { makeRuntime } from "@/effect/run-service"
import { waitEvent } from "./util"
import { WorkspaceContext } from "./workspace-context"
import { NonNegativeInt, withStatics } from "@/util/schema"
@@ -857,42 +855,4 @@ function route(url: string | URL, path: string) {
return next
}
const { runPromise, runSync } = makeRuntime(Service, defaultLayer)
export const create = fn(CreateInput.zod, (input) => runPromise((svc) => svc.create(input)))
export const sessionRestore = fn(SessionRestoreInput.zod, (input) => runPromise((svc) => svc.sessionRestore(input)))
export function list(project: Project.Info) {
return Database.use((db) =>
db
.select()
.from(WorkspaceTable)
.where(eq(WorkspaceTable.project_id, project.id))
.all()
.map(fromRow)
.sort((a, b) => a.id.localeCompare(b.id)),
)
}
export const get = fn(WorkspaceID.zod, (id) => runPromise((svc) => svc.get(id)))
export const remove = fn(WorkspaceID.zod, (id) => runPromise((svc) => svc.remove(id)))
export function status() {
return runSync((svc) => svc.status())
}
export function isSyncing(workspaceID: WorkspaceID) {
return runSync((svc) => svc.isSyncing(workspaceID))
}
export function waitForSync(workspaceID: WorkspaceID, state: Record<string, number>, signal?: AbortSignal) {
return runPromise((svc) => svc.waitForSync(workspaceID, state, signal))
}
export function startWorkspaceSyncing(projectID: ProjectID) {
void runPromise((svc) => svc.startWorkspaceSyncing(projectID))
}
export * as Workspace from "./workspace"