nestjs-event-sourcing-lib
Version:
A comprehensive Event Sourcing and CQRS library for NestJS applications
101 lines • 3.24 kB
TypeScript
import { BaseEventStore, EventStoreConnectionOptions, SaveEventsResult, GetEventsOptions, GetEventsResult, AggregateSnapshot, EventStoreStats } from '../core/event-store.interface';
import { Event } from '../core/event';
interface MongoDBClient {
connect(): Promise<void>;
close(): Promise<void>;
db(name?: string): MongoDBDatabase;
}
interface MongoDBDatabase {
collection(name: string): MongoDBCollection;
}
interface MongoDBCollection {
findOne(filter: any, options?: any): Promise<any>;
find(filter: any, options?: any): MongoDBCursor;
insertOne(doc: any, options?: any): Promise<any>;
insertMany(docs: any[], options?: any): Promise<any>;
updateOne(filter: any, update: any, options?: any): Promise<any>;
deleteOne(filter: any, options?: any): Promise<any>;
deleteMany(filter: any, options?: any): Promise<any>;
countDocuments(filter?: any): Promise<number>;
createIndex(keys: any, options?: any): Promise<string>;
aggregate(pipeline: any[]): MongoDBCursor;
}
interface MongoDBCursor {
sort(sort: any): MongoDBCursor;
limit(limit: number): MongoDBCursor;
toArray(): Promise<any[]>;
}
/**
* MongoDB Event Store implementation
*/
export declare class MongoDBEventStore extends BaseEventStore {
private readonly customClient?;
private readonly logger;
private client?;
private database?;
private eventsCollection?;
private snapshotsCollection?;
constructor(options: EventStoreConnectionOptions, customClient?: MongoDBClient | undefined);
/**
* Connects to MongoDB
*/
connect(): Promise<void>;
/**
* Disconnects from MongoDB
*/
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>;
/**
* Creates indexes for query optimization
*/
private createIndexes;
/**
* Converts EventDocument to Event
*/
private documentToEvent;
}
export {};
//# sourceMappingURL=mongodb.event-store.d.ts.map