import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform"; import { OrganizationIdSchema, WorkspaceIdSchema, WorkspaceSchema, } from "#schema"; import * as Schema from "effect/Schema"; import { ControlPlaneBadRequestError, ControlPlaneForbiddenError, ControlPlaneNotFoundError, ControlPlaneStorageError, ControlPlaneUnauthorizedError, } from "../errors"; import { OptionalTrimmedNonEmptyStringSchema, TrimmedNonEmptyStringSchema, } from "../string-schemas"; export const CreateWorkspacePayloadSchema = Schema.Struct({ name: TrimmedNonEmptyStringSchema, }); export type CreateWorkspacePayload = typeof CreateWorkspacePayloadSchema.Type; export const UpdateWorkspacePayloadSchema = Schema.Struct({ name: OptionalTrimmedNonEmptyStringSchema, }); export type UpdateWorkspacePayload = typeof UpdateWorkspacePayloadSchema.Type; const organizationIdParam = HttpApiSchema.param("organizationId", OrganizationIdSchema); const workspaceIdParam = HttpApiSchema.param("workspaceId", WorkspaceIdSchema); export class WorkspacesApi extends HttpApiGroup.make("workspaces") .add( HttpApiEndpoint.get("list")`/organizations/${organizationIdParam}/workspaces` .addSuccess(Schema.Array(WorkspaceSchema)) .addError(ControlPlaneBadRequestError) .addError(ControlPlaneUnauthorizedError) .addError(ControlPlaneForbiddenError) .addError(ControlPlaneNotFoundError) .addError(ControlPlaneStorageError), ) .add( HttpApiEndpoint.post("create")`/organizations/${organizationIdParam}/workspaces` .setPayload(CreateWorkspacePayloadSchema) .addSuccess(WorkspaceSchema) .addError(ControlPlaneBadRequestError) .addError(ControlPlaneUnauthorizedError) .addError(ControlPlaneForbiddenError) .addError(ControlPlaneNotFoundError) .addError(ControlPlaneStorageError), ) .add( HttpApiEndpoint.get("get")`/workspaces/${workspaceIdParam}` .addSuccess(WorkspaceSchema) .addError(ControlPlaneBadRequestError) .addError(ControlPlaneUnauthorizedError) .addError(ControlPlaneForbiddenError) .addError(ControlPlaneNotFoundError) .addError(ControlPlaneStorageError), ) .add( HttpApiEndpoint.patch("update")`/workspaces/${workspaceIdParam}` .setPayload(UpdateWorkspacePayloadSchema) .addSuccess(WorkspaceSchema) .addError(ControlPlaneBadRequestError) .addError(ControlPlaneUnauthorizedError) .addError(ControlPlaneForbiddenError) .addError(ControlPlaneNotFoundError) .addError(ControlPlaneStorageError), ) .add( HttpApiEndpoint.del("remove")`/workspaces/${workspaceIdParam}` .addSuccess(Schema.Struct({ removed: Schema.Boolean })) .addError(ControlPlaneBadRequestError) .addError(ControlPlaneUnauthorizedError) .addError(ControlPlaneForbiddenError) .addError(ControlPlaneStorageError), ) .prefix("/v1") {}