# ViewModel

The read side: projections of events into whatever storage a query needs.

Moleculer-cqrs pushes events to view models over the broker, so an event sent while a service is down is lost until someone replays. Here each view model pulls from the store from its own checkpoint, so it can’t miss anything, and delivery is at least once: a handler can see an event again after a crash and should be idempotent, unless the view model has a `transaction`.

## Classes

### UnknownViewModel

Defined in: [src/ViewModel.ts:40](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L40)

#### Extends

* `object` & `YieldableError`<`this`>

#### Constructors

##### Constructor

> **new UnknownViewModel**(…`args`): [`UnknownViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#unknownviewmodel)

Defined in: node_modules/.pnpm/effect\@4.0.6/node_modules/effect/dist/Schema.d.ts:10979

###### Parameters

###### args

…\[`props`: `object`, `options?`: `MakeOptions`]

###### Returns

[`UnknownViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#unknownviewmodel)

###### Inherited from

`Schema.TaggedError<UnknownViewModel>()("UnknownViewModel", { name: Schema.String }).constructor`

#### Properties

##### name

> **name**: `string` = `Schema.String`

Defined in: [src/ViewModel.ts:41](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L41)

###### Inherited from

`Schema.TaggedError<UnknownViewModel>()("UnknownViewModel", { name: Schema.String }).name`

***

### ViewModelError

Defined in: [src/ViewModel.ts:44](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L44)

#### Extends

* `object` & `YieldableError`<`this`>

#### Constructors

##### Constructor

> **new ViewModelError**(…`args`): [`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)

Defined in: node_modules/.pnpm/effect\@4.0.6/node_modules/effect/dist/Schema.d.ts:10979

###### Parameters

###### args

…\[`props`: `object`, `options?`: `MakeOptions`]

###### Returns

[`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)

###### Inherited from

``Schema.TaggedError<ViewModelError>()("ViewModelError", { viewModel: Schema.String, /** The event being processed, `0` when the failure happened outside any event. */ position: Schema.Int, cause: Schema.Defect() }).constructor``

#### Properties

##### cause

> **cause**: `unknown`

Defined in: [src/ViewModel.ts:48](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L48)

###### Inherited from

``Schema.TaggedError<ViewModelError>()("ViewModelError", { viewModel: Schema.String, /** The event being processed, `0` when the failure happened outside any event. */ position: Schema.Int, cause: Schema.Defect() }).cause``

##### position

> `readonly` **position**: `number` = `Schema.Int`

Defined in: [src/ViewModel.ts:47](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L47)

The event being processed, `0` when the failure happened outside any event.

###### Inherited from

``Schema.TaggedError<ViewModelError>()("ViewModelError", { viewModel: Schema.String, /** The event being processed, `0` when the failure happened outside any event. */ position: Schema.Int, cause: Schema.Defect() }).position``

##### viewModel

> `readonly` **viewModel**: `string` = `Schema.String`

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

###### Inherited from

``Schema.TaggedError<ViewModelError>()("ViewModelError", { viewModel: Schema.String, /** The event being processed, `0` when the failure happened outside any event. */ position: Schema.Int, cause: Schema.Defect() }).viewModel``

***

### ViewModels

Defined in: [src/ViewModel.ts:206](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L206)

#### Extends

* `Shape`<`"effect-cqrs/ViewModels"`, { `status`: `Effect`\<readonly [`Status`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#status)\[]>; `caughtUp`(`position?`): `Effect`<`void`, [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror)>; `parked`(`viewModel?`): `Effect`\<readonly `object`\[], [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror) | [`UnknownViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#unknownviewmodel)>; `replay`(`options`): `Effect`<[`ReplayResult`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#replayresult), [`UnknownViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#unknownviewmodel) | [`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)>; `retryParked`(`options`): `Effect`<[`RetryParkedResult`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#retryparkedresult), [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror) | [`UnknownViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#unknownviewmodel) | [`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)>; }, `this`>

#### Constructors

##### Constructor

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

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

###### Parameters

###### \_

`never`

###### Returns

[`ViewModels`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodels)

###### Inherited from

Context.Service\<ViewModels, { /\*\* \* Disposes the named view models and rebuilds them from their events. A time \* window limits which events are replayed: the view model then resumes from \* the present and events outside the window stay out of it. \*/ replay(options: ReplayOptions): Effect.Effect\<ReplayResult, UnknownViewModel | ViewModelError> /\*\* \* Waits until every view model has processed \`position\`, defaulting to the \* latest event. Pair it with \`CommandResult.position\` to read your own writes. \* A view model stalled on a failure doesn’t catch up, so consider a timeout. \* View models that another process holds are not waited for. \*/ caughtUp(position?: number): Effect.Effect\<void, EventStoreError> readonly status: Effect.Effect\<ReadonlyArray\<Status>> /\*\* The events the view models of this layer parked, or those of one of them. \*/ parked(viewModel?: string): Effect.Effect\<ReadonlyArray\<ParkedEvents.ParkedEvent>, UnknownViewModel | EventStoreError> /\*\* \* Handles parked events again, in order of position. Those that succeed are no \* longer parked, and the others stay parked with the new failure. \*/ retryParked( options: RetryParkedOptions ): Effect.Effect\<RetryParkedResult, UnknownViewModel | ViewModelError | EventStoreError> }>()(“effect-cqrs/ViewModels”).constructor

## Interfaces

### ReplayOptions

Defined in: [src/ViewModel.ts:171](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L171)

#### Properties

##### finishTime?

> `readonly` `optional` **finishTime?**: `Utc`

Defined in: [src/ViewModel.ts:174](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L174)

##### startTime?

> `readonly` `optional` **startTime?**: `Utc`

Defined in: [src/ViewModel.ts:173](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L173)

##### viewModels

> `readonly` **viewModels**: readonly `string`\[]

Defined in: [src/ViewModel.ts:172](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L172)

***

### ReplayResult

Defined in: [src/ViewModel.ts:177](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L177)

#### Properties

##### eventCount

> `readonly` **eventCount**: `number`

Defined in: [src/ViewModel.ts:179](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L179)

##### viewModels

> `readonly` **viewModels**: readonly `string`\[]

Defined in: [src/ViewModel.ts:178](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L178)

***

### RetryParkedOptions

Defined in: [src/ViewModel.ts:193](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L193)

#### Properties

##### positions?

> `readonly` `optional` **positions?**: readonly `number`\[]

Defined in: [src/ViewModel.ts:196](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L196)

The positions of the events to retry. Defaults to every event the view model parked.

##### viewModel

> `readonly` **viewModel**: `string`

Defined in: [src/ViewModel.ts:194](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L194)

***

### RetryParkedResult

Defined in: [src/ViewModel.ts:199](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L199)

#### Properties

##### failed

> `readonly` **failed**: readonly `object`\[]

Defined in: [src/ViewModel.ts:203](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L203)

The events that failed again, as they are parked now.

##### succeeded

> `readonly` **succeeded**: readonly `number`\[]

Defined in: [src/ViewModel.ts:201](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L201)

The positions of the events that were handled, and are no longer parked.

***

### Status

Defined in: [src/ViewModel.ts:182](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L182)

#### Properties

##### holdsLease

> `readonly` **holdsLease**: `boolean`

Defined in: [src/ViewModel.ts:190](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L190)

Whether this process holds the view model’s lease, and so runs it. See `Leases`.

##### lastError

> `readonly` **lastError**: `Option`<[`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)>

Defined in: [src/ViewModel.ts:186](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L186)

The failure the view model is retrying, while it is stalled on one.

##### name

> `readonly` **name**: `string`

Defined in: [src/ViewModel.ts:183](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L183)

##### parked

> `readonly` **parked**: `number`

Defined in: [src/ViewModel.ts:188](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L188)

How many events the view model parked and skips, see [park](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#park).

##### position

> `readonly` **position**: `number`

Defined in: [src/ViewModel.ts:184](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L184)

***

### ViewModel

Defined in: [src/ViewModel.ts:66](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L66)

#### Type Parameters

##### Name

`Name` *extends* `string`

##### E

`E`

##### R

`R`

#### Properties

##### aggregates

> `readonly` **aggregates**: readonly [`Any`](https://effect-cqrs.dambox.ch/reference/api/aggregate/#any)\[]

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

##### dispose

> `readonly` **dispose**: `Effect`<`void`, `E`, `R`>

Defined in: [src/ViewModel.ts:71](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L71)

Clears everything the view model stored, before a replay rebuilds it.

##### handlers

> `readonly` **handlers**: `Record`<`string`, (`event`, `meta`) => `Effect.Effect`<`unknown`, `E`, `R`>>

Defined in: [src/ViewModel.ts:69](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L69)

##### name

> `readonly` **name**: `Name`

Defined in: [src/ViewModel.ts:67](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L67)

##### onFailure?

> `readonly` `optional` **onFailure?**: [`FailurePolicy`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy)

Defined in: [src/ViewModel.ts:75](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L75)

What happens to an event its handler keeps failing on. Defaults to [stall](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#stall).

##### onForget?

> `readonly` `optional` **onForget?**: (`subject`, `meta`) => `Effect`<`unknown`, `E`, `R`>

Defined in: [src/ViewModel.ts:73](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L73)

Erases what the view model stored about a forgotten subject, see `PersonalData.forget`.

###### Parameters

###### subject

`string`

###### meta

[`EventMeta`](https://effect-cqrs.dambox.ch/reference/api/aggregate/#eventmeta)

###### Returns

`Effect`<`unknown`, `E`, `R`>

##### transaction?

> `readonly` `optional` **transaction?**: [`Transaction`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#transaction-1)<`R`>

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

Runs each batch of handlers together with the checkpoint they reach, see [sqlTransaction](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#sqltransaction).

## Type Aliases

### Any

> **Any** = [`ViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodel-2)<`string`, `any`, `any`>

Defined in: [src/ViewModel.ts:114](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L114)

***

### Context

> **Context**<`V`> = `V` *extends* [`ViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodel-2)<`any`, `any`, infer R> ? `R` : `never`

Defined in: [src/ViewModel.ts:116](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L116)

#### Type Parameters

##### V

`V` *extends* [`Any`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#any)

***

### FailurePolicy

> **FailurePolicy** = { `_tag`: `"Stall"`; } | { `_tag`: `"Park"`; `attempts`: `number`; }

Defined in: [src/ViewModel.ts:101](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L101)

What a view model does about an event whose handler keeps failing.

* `Stall` retries it forever, with a growing delay, and nothing after it is processed in the meantime. Nothing is ever skipped.
* `Park` retries it until it has failed `attempts` times, then records it in `ParkedEvents` and moves on. `ViewModels.retryParked` handles it again later.

***

### Handlers

> **Handlers**<`Event`> = `{ readonly [Tag in Event["_tag"]]?: (event: Extract<Event, { _tag: Tag }>, meta: EventMeta) => Effect.Effect<unknown, any, any> }`

Defined in: [src/ViewModel.ts:51](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L51)

#### Type Parameters

##### Event

`Event` *extends* [`Tagged`](https://effect-cqrs.dambox.ch/reference/api/aggregate/#tagged)

***

### Transaction

> **Transaction**<`R`> = (`effect`) => `Effect.Effect`<`void`, `unknown`, `R`>

Defined in: [src/ViewModel.ts:84](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L84)

Wraps a batch of handlers and the checkpoint after them, so that they commit or roll back together.

#### Type Parameters

##### R

`R`

#### Parameters

##### effect

`Effect.Effect`<`void`, [`ViewModelError`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodelerror)>

#### Returns

`Effect.Effect`<`void`, `unknown`, `R`>

## Variables

### MetricNames

> `const` **MetricNames**: `object`

Defined in: [src/ViewModel.ts:236](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L236)

The names of the metrics view models record through Effect’s `Metric` module. Each series carries a `view_model` attribute with the view model’s name.

#### Type Declaration

##### parkedEvents

> `readonly` **parkedEvents**: `"cqrs_view_model_parked_events_total"` = `"cqrs_view_model_parked_events_total"`

Counter: events a view model parked after its handler kept failing on them.

***

### sqlTransaction

> `const` **sqlTransaction**: [`Transaction`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#transaction-1)<`SqlClient.SqlClient`>

Defined in: [src/ViewModel.ts:90](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L90)

A transaction of the `SqlClient` in context. The read model and the checkpoints have to use that same client for their writes to join it.

***

### stall

> `const` **stall**: [`FailurePolicy`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy)

Defined in: [src/ViewModel.ts:106](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L106)

Retries a failing event until it succeeds, holding everything after it back. The default.

## Functions

### layer()

> **layer**<`VMs`>(`viewModels`): `Layer`<[`ViewModels`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodels), [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), [`EventStore`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstore) | [`Checkpoints`](https://effect-cqrs.dambox.ch/reference/api/checkpoints/#checkpoints) | [`Context`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#context)<`VMs`\[`number`]>>

Defined in: [src/ViewModel.ts:723](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L723)

Starts the view models in the background for as long as the layer lives.

Each view model runs where its lease is held, see `Leases`: by default in every process, which suits a single one. Events that view models park go to the `ParkedEvents` in context, or to memory without one.

#### Type Parameters

##### VMs

`VMs` *extends* readonly [`Any`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#any)\[]

#### Parameters

##### viewModels

`VMs`

#### Returns

`Layer`<[`ViewModels`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodels), [`EventStoreError`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstoreerror), [`EventStore`](https://effect-cqrs.dambox.ch/reference/api/eventstore/#eventstore) | [`Checkpoints`](https://effect-cqrs.dambox.ch/reference/api/checkpoints/#checkpoints) | [`Context`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#context)<`VMs`\[`number`]>>

***

### make()

> **make**<`Name`, `Aggregates`, `H`, `E`, `R`, `FE`, `FR`, `TR`>(`options`): [`ViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodel-2)<`Name`, `E` | `FE` | `HandlerError`<`H`>, `R` | `FR` | `TR` | `HandlerContext`<`H`>>

Defined in: [src/ViewModel.ts:130](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L130)

Handlers are keyed by event tag, and events without one are skipped.

A view model that keeps personal data handles `onForget`, which runs when `PersonalData.forget` records that a subject was forgotten, in order with the events around it. Events the view model reads afterwards already carry the replacements, so it only has to erase what it stored before.

`onFailure` decides what happens to an event that keeps failing, see [FailurePolicy](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy). With `transaction`, each batch of handlers runs in one transaction with the checkpoint it reaches, so a crash never repeats an event.

#### Type Parameters

##### Name

`Name` *extends* `string`

##### Aggregates

`Aggregates` *extends* readonly [`Any`](https://effect-cqrs.dambox.ch/reference/api/aggregate/#any)\[]

##### H

`H` *extends* [`Handlers`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#handlers-1)<[`Event`](https://effect-cqrs.dambox.ch/reference/api/aggregate/#event-2)<`Aggregates`\[`number`]>>

##### E

`E` = `never`

##### R

`R` = `never`

##### FE

`FE` = `never`

##### FR

`FR` = `never`

##### TR

`TR` = `never`

#### Parameters

##### options

###### aggregates

`Aggregates`

###### dispose

`Effect`<`void`, `E`, `R`>

###### handlers

`H`

###### name

`Name`

###### onFailure?

[`FailurePolicy`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy)

###### onForget?

(`subject`, `meta`) => `Effect`<`unknown`, `FE`, `FR`>

###### transaction?

[`Transaction`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#transaction-1)<`TR`>

#### Returns

[`ViewModel`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#viewmodel-2)<`Name`, `E` | `FE` | `HandlerError`<`H`>, `R` | `FR` | `TR` | `HandlerContext`<`H`>>

***

### park()

> **park**(`options`): [`FailurePolicy`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy)

Defined in: [src/ViewModel.ts:109](https://github.com/davidnussio/effect-cqrs/blob/9d66af7141782f3f89655e6868abe3f141c97632/src/ViewModel.ts#L109)

Gives up on an event after it failed `attempts` times, and goes on with the next ones.

#### Parameters

##### options

###### attempts

`number`

#### Returns

[`FailurePolicy`](https://effect-cqrs.dambox.ch/reference/api/viewmodel/#failurepolicy)
