import { z } from "zod"; import { WorkspaceNotFoundError } from "../../entities/errors/workspace"; import { workspaceSchema } from "../../entities/models/workspace"; import type { IWorkspaceRepository } from "../repositories/workspace.repository.interface"; // ── Input ──────────────────────────────────────────────────────────────── export const getWorkspaceStatusInputSchema = z .object({ id: z.string().min(1), }) .strict(); export type GetWorkspaceStatusInput = z.infer< typeof getWorkspaceStatusInputSchema >; // ── Output ─────────────────────────────────────────────────────────────── // Persisted state only in this story — runner-driven transitions (story 07) // extend the status enum, not this shape. export const getWorkspaceStatusOutputSchema = workspaceSchema.pick({ id: true, status: true, }); export type GetWorkspaceStatusOutput = z.infer< typeof getWorkspaceStatusOutputSchema >; // ── Use case ───────────────────────────────────────────────────────────── export type IGetWorkspaceStatusUseCase = ReturnType< typeof getWorkspaceStatusUseCase >; export const getWorkspaceStatusUseCase = (workspaceRepository: IWorkspaceRepository) => async (input: GetWorkspaceStatusInput): Promise => { const workspace = await workspaceRepository.getWorkspace(input.id); if (!workspace) { throw new WorkspaceNotFoundError(`Workspace not found: ${input.id}`); } return getWorkspaceStatusOutputSchema.parse({ id: workspace.id, status: workspace.status, }); };