# ParkedEvents

Events a view model gave up on, so the rest of the log could move past them.

A view model with the `ViewModel.park` failure policy records an event here once it has failed often enough, skips it from then on, and handles it again when `ViewModels.retryParked` asks it to.

## Classes

### ParkedEvents

Defined in: [src/ParkedEvents.ts:30](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L30)

#### Extends

* `Shape`<`"effect-cqrs/ParkedEvents"`, { `list`(`viewModel?`): `Effect`\<readonly `object`\[], [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `park`(`event`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `remove`(`viewModel`, `position`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; }, `this`>

#### Constructors

##### Constructor

> **new ParkedEvents**(`_`): [`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents)

Defined in: node_modules/.pnpm/effect\@4.0.6/node_modules/effect/dist/Context.d.ts:121

###### Parameters

###### \_

`never`

###### Returns

[`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents)

###### Inherited from

`Context.Service<ParkedEvents, { /** Records an event, replacing an earlier record of the same one. */ park(event: ParkedEvent): Effect.Effect<void, EventStoreError> /** The parked events of one view model, or of all of them, by view model and position. */ list(viewModel?: string): Effect.Effect<ReadonlyArray<ParkedEvent>, EventStoreError> /** Forgets an event, once it has been handled. */ remove(viewModel: string, position: number): Effect.Effect<void, EventStoreError> }>()("effect-cqrs/ParkedEvents").constructor`

## Interfaces

### SqlOptions

Defined in: [src/ParkedEvents.ts:61](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L61)

#### Properties

##### migrate?

> `readonly` `optional` **migrate?**: `boolean`

Defined in: [src/ParkedEvents.ts:68](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L68)

Creates the table on startup when it is missing. Defaults to `true`. Turn it off where the schema is managed elsewhere, from [migrations](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#migrations).

##### table?

> `readonly` `optional` **table?**: `string`

Defined in: [src/ParkedEvents.ts:63](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L63)

Defaults to `cqrs_parked_events`.

## Type Aliases

### ParkedEvent

> **ParkedEvent** = *typeof* `ParkedEvent.Type`

Defined in: [src/ParkedEvents.ts:15](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L15)

## Variables

### layerMemory

> `const` **layerMemory**: `Layer.Layer`<[`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents)>

Defined in: [src/ParkedEvents.ts:59](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L59)

***

### makeMemory

> `const` **makeMemory**: `Effect.Effect`<[`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents)\[`"Service"`]>

Defined in: [src/ParkedEvents.ts:45](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L45)

Parked events in process memory. They do not survive a restart.

***

### makeSql

> `const` **makeSql**: (…`args`) => `Effect`<{ `list`(`viewModel?`): `Effect`\<readonly `object`\[], [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `park`(`event`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `remove`(`viewModel`, `position`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; }, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), `SqlClient`>

Defined in: [src/ParkedEvents.ts:97](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L97)

Parked events in a SQL table, on SQLite or PostgreSQL.

#### Parameters

##### args

…\[`options?`: [`SqlOptions`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#sqloptions)]

#### Returns

`Effect`<{ `list`(`viewModel?`): `Effect`\<readonly `object`\[], [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `park`(`event`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `remove`(`viewModel`, `position`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; }, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), `SqlClient`>

***

### ParkedEvent

> `const` **ParkedEvent**: `Struct`<{ `attempts`: `Int`; `error`: `String`; `eventId`: `String`; `parkedAt`: `DateTimeUtcFromMillis`; `position`: `Int`; `viewModel`: `String`; }>

Defined in: [src/ParkedEvents.ts:15](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L15)

## Functions

### layerSql()

> **layerSql**(`options?`): `Layer`<[`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents), [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), `SqlClient`>

Defined in: [src/ParkedEvents.ts:152](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L152)

Parked events in a SQL table, see [makeSql](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#makesql). Give it the client of the read models, and a retried event leaves the table in the same transaction as its handler’s writes when the view model has a `transaction`.

#### Parameters

##### options?

[`SqlOptions`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#sqloptions)

#### Returns

`Layer`<[`ParkedEvents`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#parkedevents), [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), `SqlClient`>

***

### migrations()

> **migrations**(`options?`): readonly [`Migration`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#migration)\[]

Defined in: [src/ParkedEvents.ts:77](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ParkedEvents.ts#L77)

The migrations of the table, the same on SQLite and PostgreSQL. They are what [layerSql](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#layersql) runs unless `migrate` is `false`, and are safe to run again.

#### Parameters

##### options?

`Pick`<[`SqlOptions`](https://effect-cqrs.dambox.ch/reference/api/parkedevents/#sqloptions), `"table"`>

#### Returns

readonly [`Migration`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#migration)\[]
