@saga-bus/store-prisma
v0.2.2
Published
Prisma ORM adapter for saga-bus state storage
Maintainers
Readme
@saga-bus/store-prisma
Prisma ORM adapter for saga-bus state storage.
Installation
pnpm add @saga-bus/store-prisma @prisma/clientPrisma Schema
Add to your schema.prisma:
model SagaInstance {
id String @db.VarChar(128)
sagaName String @map("saga_name") @db.VarChar(128)
correlationId String @map("correlation_id") @db.VarChar(256)
version Int
isCompleted Boolean @default(false) @map("is_completed")
state Json
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@id([sagaName, id])
@@unique([sagaName, correlationId])
@@index([sagaName, isCompleted])
@@map("saga_instances")
}Usage
import { PrismaClient } from "@prisma/client";
import { PrismaSagaStore } from "@saga-bus/store-prisma";
import { createBus } from "@saga-bus/core";
const prisma = new PrismaClient();
const store = new PrismaSagaStore({ prisma });
const bus = createBus({
sagas: [{ definition: mySaga, store }],
transport,
});Features
- Uses your existing PrismaClient
- Optimistic concurrency control
- Type-safe state serialization
- Works with any Prisma-supported database
Sharing Across Sagas
A single store instance can be shared across multiple sagas:
const store = new PrismaSagaStore({ prisma });
const bus = createBus({
transport,
store, // shared by all sagas
sagas: [
{ definition: orderSaga },
{ definition: paymentSaga },
],
});Data is isolated by sagaName in the database, so different saga types won't conflict.
License
MIT
