@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
87 lines (86 loc) • 3.11 kB
TypeScript
import { Gateway, Network, Wallet } from 'fabric-network';
import { RedisPubSub } from 'graphql-redis-subscriptions';
import type { FTSearchParameters } from 'redis-modules-sdk';
import { Logger } from 'winston';
import type { Reducer, SaveFcn, Commit, FabricResponse, Paginated, RepoFcn, RepoFcn_Id, HandlerResponse } from '../../types';
import type { OutputCommit, QueryDatabase } from '.';
export declare type QueryHandlerOption = {
connectionProfile: string;
channelName: string;
entityNames: string[];
gateway: Gateway;
logger?: Logger;
network: Network;
pubSub?: RedisPubSub;
queryDatabase: QueryDatabase;
reducers: Record<string, Reducer>;
wallet: Wallet;
};
export declare type QueryHandler = {
clearNotification: (option: {
creator: string;
entityName: string;
id: string;
commitId: string;
}) => Promise<HandlerResponse<string[]>>;
clearNotifications: (option: {
creator: string;
entityName?: string;
id?: string;
commitId?: string;
}) => Promise<HandlerResponse<string[]>>;
command_deleteByEntityId: (entityName: string) => RepoFcn_Id<FabricResponse>;
command_getByEntityName: (entityName: string) => RepoFcn<Commit[]>;
create: <TEvent>(entityName: string) => (option: {
enrollmentId: string;
id: string;
}) => {
save: SaveFcn<TEvent>;
};
disconnect: () => void;
fullTextSearchCommit: (option: {
query: string;
cursor: number;
pagesize: number;
param?: FTSearchParameters;
}) => Promise<HandlerResponse<Paginated<OutputCommit>>>;
fullTextSearchEntity: <TOutputEntity>(option: {
entityName: string;
query: string;
cursor: number;
pagesize: number;
param?: FTSearchParameters;
}) => Promise<HandlerResponse<Paginated<TOutputEntity>>>;
getByEntityName: <TEntity = any>(entityName: string) => RepoFcn<TEntity[]>;
getById: <TEntity, TEvent>(entityName: string) => (option: {
enrollmentId: string;
id: string;
}) => Promise<{
currentState: TEntity;
save: SaveFcn<TEvent>;
}>;
getCommitById: (entityName: string) => RepoFcn_Id<Commit[]>;
getNotifications: (payload: {
creator: string;
entityName?: string;
id?: string;
}) => Promise<HandlerResponse<Record<string, string>>>;
getNotification: (payload: {
creator: string;
entityName: string;
id: string;
commitId: string;
}) => Promise<HandlerResponse<Record<string, string>>>;
query_deleteCommitByEntityId: (entityName: string) => RepoFcn_Id<number>;
query_deleteCommitByEntityName: (entityName: string) => RepoFcn<number>;
query_deleteEntityByEntityName: (entityName: string) => RepoFcn<number>;
reconcile: (payload: {
entityName: string;
}) => Promise<HandlerResponse<{
key: string;
status: string;
}[]>>;
reconciled: () => void;
subscribeHub: (entityNames: string[]) => Promise<any>;
unsubscribeHub: () => void;
};