66 lines · 2.1 KB · TypeScript
RawDownload
/** * ProjectionStateRepository - Projection repository interface for projector cursors. * * Owns persistence operations for projection cursor state used to resume * incremental event projection. * * @module ProjectionStateRepository */import { IsoDateTime, NonNegativeInt } from "@t3tools/contracts";import * as Option from "effect/Option";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 ProjectionState = Schema.Struct({  projector: Schema.String,  lastAppliedSequence: NonNegativeInt,  updatedAt: IsoDateTime,});export type ProjectionState = typeof ProjectionState.Type; export const GetProjectionStateInput = Schema.Struct({  projector: Schema.String,});export type GetProjectionStateInput = typeof GetProjectionStateInput.Type; /** * ProjectionStateRepositoryShape - Service API for projector state records. */export interface ProjectionStateRepositoryShape {  /**   * Insert or replace a projection cursor row.   *   * Upserts by projector name.   */  readonly upsert: (row: ProjectionState) => Effect.Effect<void, ProjectionRepositoryError>;   /**   * Read projection cursor state for a projector key.   */  readonly getByProjector: (    input: GetProjectionStateInput,  ) => Effect.Effect<Option.Option<ProjectionState>, ProjectionRepositoryError>;   /**   * List all projector cursor rows.   */  readonly listAll: () => Effect.Effect<ReadonlyArray<ProjectionState>, ProjectionRepositoryError>;   /**   * Read the minimum applied sequence across all projectors.   *   * Returns `null` when no projector state rows exist.   */  readonly minLastAppliedSequence: () => Effect.Effect<number | null, ProjectionRepositoryError>;} /** * ProjectionStateRepository - Service tag for projection cursor persistence. */export class ProjectionStateRepository extends Context.Service<  ProjectionStateRepository,  ProjectionStateRepositoryShape>()("t3/persistence/Services/ProjectionState/ProjectionStateRepository") {}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t