nestjs-event-sourcing-lib
Version:
A comprehensive Event Sourcing and CQRS library for NestJS applications
99 lines • 3.33 kB
TypeScript
import { BaseEventStore, EventStoreConnectionOptions, SaveEventsResult, GetEventsOptions, GetEventsResult, AggregateSnapshot, EventStoreStats } from '../core/event-store.interface';
import { Event } from '../core/event';
interface PrismaClient {
$connect(): Promise<void>;
$disconnect(): Promise<void>;
$transaction<R>(fn: (prisma: PrismaClient) => Promise<R>): Promise<R>;
$queryRaw<T = any>(query: TemplateStringsArray | string, ...values: any[]): Promise<T>;
event: {
findMany(args?: any): Promise<any[]>;
findFirst(args?: any): Promise<any>;
findUnique(args?: any): Promise<any>;
create(args: any): Promise<any>;
createMany(args: any): Promise<any>;
update(args: any): Promise<any>;
delete(args: any): Promise<any>;
deleteMany(args?: any): Promise<any>;
count(args?: any): Promise<number>;
aggregate(args?: any): Promise<any>;
};
eventSnapshot: {
findMany(args?: any): Promise<any[]>;
findFirst(args?: any): Promise<any>;
findUnique(args?: any): Promise<any>;
create(args: any): Promise<any>;
createMany(args: any): Promise<any>;
update(args: any): Promise<any>;
upsert(args: any): Promise<any>;
delete(args: any): Promise<any>;
deleteMany(args?: any): Promise<any>;
count(args?: any): Promise<number>;
};
}
/**
* Prisma Event Store implementation
*/
export declare class PrismaEventStore extends BaseEventStore {
private readonly customPrismaClient?;
private readonly logger;
private prisma?;
constructor(options: EventStoreConnectionOptions, customPrismaClient?: PrismaClient | undefined);
/**
* Connects to database via Prisma
*/
connect(): Promise<void>;
/**
* Disconnects from database
*/
disconnect(): Promise<void>;
/**
* Saves events for aggregate
*/
saveEvents(aggregateId: string, events: Event[], expectedVersion?: number): Promise<SaveEventsResult>;
/**
* Gets events for aggregate
*/
getEvents(aggregateId: string, options?: GetEventsOptions): Promise<GetEventsResult>;
/**
* Saves aggregate snapshot
*/
saveSnapshot(snapshot: AggregateSnapshot): Promise<void>;
/**
* Gets the latest snapshot for aggregate
*/
getSnapshot(aggregateId: string): Promise<AggregateSnapshot | null>;
/**
* Deletes aggregate snapshot
*/
deleteSnapshot(aggregateId: string): Promise<void>;
/**
* Gets events by type
*/
getEventsByType(eventType: string, options?: GetEventsOptions): Promise<GetEventsResult>;
/**
* Gets events in time range
*/
getEventsByTimeRange(from: Date, to: Date, options?: GetEventsOptions): Promise<GetEventsResult>;
/**
* Deletes all events for aggregate
*/
deleteAggregate(aggregateId: string): Promise<void>;
/**
* Gets Event Store statistics
*/
getStats(): Promise<EventStoreStats>;
/**
* Clears all data (used for testing)
*/
clear(): Promise<void>;
/**
* Checks Event Store health
*/
healthCheck(): Promise<boolean>;
/**
* Converts database record to Event
*/
private recordToEvent;
}
export {};
//# sourceMappingURL=prisma.event-store.d.ts.map