50 lines · 1.9 KB · TypeScript
RawDownload
import { IsoDateTime, ThreadId, TrimmedNonEmptyString, TurnId } from "@t3tools/contracts";import { OrchestrationProposedPlanId } from "@t3tools/contracts/legacy-orchestration";import * as Schema from "effect/Schema";import * as Context from "effect/Context";import type * as Effect from "effect/Effect"; import type { ProjectionRepositoryError } from "../Errors.ts"; export const ProjectionThreadProposedPlan = Schema.Struct({  planId: OrchestrationProposedPlanId,  threadId: ThreadId,  turnId: Schema.NullOr(TurnId),  planMarkdown: TrimmedNonEmptyString,  implementedAt: Schema.NullOr(IsoDateTime),  implementationThreadId: Schema.NullOr(ThreadId),  createdAt: IsoDateTime,  updatedAt: IsoDateTime,});export type ProjectionThreadProposedPlan = typeof ProjectionThreadProposedPlan.Type; export const ListProjectionThreadProposedPlansInput = Schema.Struct({  threadId: ThreadId,});export type ListProjectionThreadProposedPlansInput =  typeof ListProjectionThreadProposedPlansInput.Type; export const DeleteProjectionThreadProposedPlansInput = Schema.Struct({  threadId: ThreadId,});export type DeleteProjectionThreadProposedPlansInput =  typeof DeleteProjectionThreadProposedPlansInput.Type; export interface ProjectionThreadProposedPlanRepositoryShape {  readonly upsert: (    proposedPlan: ProjectionThreadProposedPlan,  ) => Effect.Effect<void, ProjectionRepositoryError>;  readonly listByThreadId: (    input: ListProjectionThreadProposedPlansInput,  ) => Effect.Effect<ReadonlyArray<ProjectionThreadProposedPlan>, ProjectionRepositoryError>;  readonly deleteByThreadId: (    input: DeleteProjectionThreadProposedPlansInput,  ) => Effect.Effect<void, ProjectionRepositoryError>;} export class ProjectionThreadProposedPlanRepository extends Context.Service<  ProjectionThreadProposedPlanRepository,  ProjectionThreadProposedPlanRepositoryShape>()(  "t3/persistence/Services/ProjectionThreadProposedPlans/ProjectionThreadProposedPlanRepository",) {}