Add filtering for event name in eventsInRange GQL query

This commit is contained in:
Nabarun 2025-03-19 19:48:38 +05:30
parent d6e81b338a
commit e1ecab6168
7 changed files with 22 additions and 17 deletions

View File

@ -579,7 +579,8 @@ export class Schema {
type: this._composer.getOTC('ResultEvent').NonNull.List,
args: {
fromBlockNumber: 'Int!',
toBlockNumber: 'Int!'
toBlockNumber: 'Int!',
name: 'String'
}
}
});

View File

@ -193,10 +193,10 @@ export class Database implements DatabaseInterface {
return this._baseDatabase.getProcessedBlockCountForRange(repo, fromBlockNumber, toBlockNumber);
}
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise<Array<Event>> {
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise<Array<Event>> {
const repo = this._conn.getRepository(Event);
return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber);
return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber, name);
}
async saveEventEntity (queryRunner: QueryRunner, entity: Event): Promise<Event> {

View File

@ -659,8 +659,8 @@ export class Indexer implements IndexerInterface {
return this._baseIndexer.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber);
}
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise<Array<Event>> {
return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, this._serverConfig.gql.maxEventsBlockRange);
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise<Array<Event>> {
return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, name, this._serverConfig.gql.maxEventsBlockRange);
}
async getSyncStatus (): Promise<SyncStatus | undefined> {

View File

@ -225,10 +225,10 @@ export const createResolvers = async (
eventsInRange: async (
_: any,
{ fromBlockNumber, toBlockNumber }: { fromBlockNumber: number, toBlockNumber: number },
{ fromBlockNumber, toBlockNumber, name }: { fromBlockNumber: number, toBlockNumber: number, name?: string },
expressContext: ExpressContext
) => {
log('eventsInRange', fromBlockNumber, toBlockNumber);
log('eventsInRange', fromBlockNumber, toBlockNumber, name);
return executeAndRecordMetrics(
indexer,
@ -246,7 +246,7 @@ export const createResolvers = async (
throw new Error(`Block range should be between ${syncStatus.initialIndexedBlockNumber} and ${syncStatus.latestProcessedBlockNumber}`);
}
const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber);
const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber, name);
return events.map(event => indexer.getResultEvent(event));
}
);

View File

@ -509,18 +509,22 @@ export class Database {
return { expected, actual: parseInt(actual) };
}
async getEventsInRange (repo: Repository<EventInterface>, fromBlockNumber: number, toBlockNumber: number): Promise<Array<EventInterface>> {
const events = repo.createQueryBuilder('event')
async getEventsInRange (repo: Repository<EventInterface>, fromBlockNumber: number, toBlockNumber: number, name?: string): Promise<Array<EventInterface>> {
const queryBuilder = repo.createQueryBuilder('event')
.innerJoinAndSelect('event.block', 'block')
.where('block_number >= :fromBlockNumber AND block_number <= :toBlockNumber AND event_name <> :eventName AND is_pruned = false', {
fromBlockNumber,
toBlockNumber,
eventName: UNKNOWN_EVENT_NAME
})
});
if (name) {
queryBuilder.andWhere('event.event_name = :name', { name });
}
return queryBuilder
.addOrderBy('event.id', 'ASC')
.getMany();
return events;
}
async saveEventEntity (repo: Repository<EventInterface>, entity: EventInterface): Promise<EventInterface> {

View File

@ -789,7 +789,7 @@ export class Indexer {
return this._db.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber);
}
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, maxBlockRange: number = DEFAULT_MAX_EVENTS_BLOCK_RANGE): Promise<Array<EventInterface>> {
async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, maxBlockRange: number = DEFAULT_MAX_EVENTS_BLOCK_RANGE, name?: string): Promise<Array<EventInterface>> {
if (toBlockNumber <= fromBlockNumber) {
throw new Error('toBlockNumber should be greater than fromBlockNumber');
}
@ -798,7 +798,7 @@ export class Indexer {
throw new Error(`Max range (${maxBlockRange}) exceeded`);
}
return this._db.getEventsInRange(fromBlockNumber, toBlockNumber);
return this._db.getEventsInRange(fromBlockNumber, toBlockNumber, name);
}
isWatchedContract (address : string): ContractInterface | undefined {
@ -1359,7 +1359,7 @@ export class Indexer {
}
}
async clearProcessedBlockData (block: BlockProgressInterface, entities: EntityTarget<{ blockNumber: number }>[]): Promise<void> {
async clearProcessedBlockData (block: BlockProgressInterface, entities: EntityTarget<{ blockNumber: number, blockHash: string }>[]): Promise<void> {
const dbTx = await this._db.createTransactionRunner();
try {

View File

@ -254,7 +254,7 @@ export interface DatabaseInterface {
getSyncStatus (queryRunner: QueryRunner): Promise<SyncStatusInterface | undefined>
getAncestorAtHeight (blockHash: string, height: number): Promise<string>
getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }>;
getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise<Array<EventInterface>>;
getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise<Array<EventInterface>>;
markBlocksAsPruned (queryRunner: QueryRunner, blocks: BlockProgressInterface[]): Promise<void>;
saveBlockProgress (queryRunner: QueryRunner, block: DeepPartial<BlockProgressInterface>): Promise<BlockProgressInterface>;
updateBlockProgress (queryRunner: QueryRunner, block: BlockProgressInterface, lastProcessedEventIndex: number): Promise<BlockProgressInterface>