Skip to content

Commit abd2efd

Browse files
authored
add events filtered by order (#1523)
1 parent 26038f1 commit abd2efd

4 files changed

Lines changed: 52 additions & 1 deletion

File tree

src/common/indexer/elastic/elastic.indexer.helper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,10 @@ export class ElasticIndexerHelper {
810810
elasticQuery = elasticQuery.withMustMatchCondition('address', filter.address);
811811
}
812812

813+
if (filter.order) {
814+
elasticQuery = elasticQuery.withCondition(QueryConditionOptions.must, QueryType.Match('order', filter.order));
815+
}
816+
813817
return elasticQuery;
814818
}
815819
}

src/endpoints/events/entities/events.filter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export class EventsFilter {
1010
shard: number = 0;
1111
before: number = 0;
1212
after: number = 0;
13+
order: number = 0;
1314
}

src/endpoints/events/events.controller.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export class EventsController {
2525
@ApiQuery({ name: 'shard', description: 'Event shard id', required: false })
2626
@ApiQuery({ name: 'before', description: 'Event before timestamp', required: false })
2727
@ApiQuery({ name: 'after', description: 'Event after timestamp', required: false })
28+
@ApiQuery({ name: 'order', description: 'Event order', required: false })
2829
async getEvents(
2930
@Query('from', new DefaultValuePipe(0), ParseIntPipe) from: number,
3031
@Query('size', new DefaultValuePipe(25), ParseIntPipe) size: number,
@@ -34,10 +35,11 @@ export class EventsController {
3435
@Query('shard', ParseIntPipe) shard: number,
3536
@Query('before', ParseIntPipe) before: number,
3637
@Query('after', ParseIntPipe) after: number,
38+
@Query('order', ParseIntPipe) order: number,
3739
): Promise<Events[]> {
3840
return await this.eventsService.getEvents(
3941
new QueryPagination({ from, size }),
40-
new EventsFilter({ address, identifier, txHash, shard, after, before }));
42+
new EventsFilter({ address, identifier, txHash, shard, after, before, order }));
4143
}
4244

4345
@Get('/events/count')

src/test/unit/services/events.spec.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,50 @@ describe('EventsService', () => {
9393
expect(result).toEqual([]);
9494
expect(indexerService.getEvents).toHaveBeenCalledWith(pagination, filter);
9595
});
96+
97+
it('should return events in the correct order', async () => {
98+
const pagination: QueryPagination = { from: 0, size: 10 };
99+
const filter: EventsFilter = new EventsFilter({ order: 1 });
100+
101+
const mockElasticEvents = [
102+
generateMockEvent(),
103+
generateMockEvent({ _id: "5d4a7cd39caf55aaaef038d2fe5fd864b01db2170253c158-1-1", identifier: 'ESDTNFTCreate' }),
104+
];
105+
106+
const expectedEvents = [
107+
createExpectedEvent("7e3faa2a4ea5cfe8667f2e13eb27076b0452742dbe01044871c8ea109f73ebed", "transferValueOnly"),
108+
createExpectedEvent("5d4a7cd39caf55aaaef038d2fe5fd864b01db2170253c158-1-1", "ESDTNFTCreate"),
109+
];
110+
111+
mockIndexerService.getEvents.mockResolvedValue(mockElasticEvents);
112+
113+
const result = await service.getEvents(pagination, filter);
114+
115+
expect(result).toEqual(expectedEvents);
116+
expect(indexerService.getEvents).toHaveBeenCalledWith(pagination, filter);
117+
});
118+
119+
it('should return events filtered by shard', async () => {
120+
const pagination: QueryPagination = { from: 0, size: 10 };
121+
const filter: EventsFilter = new EventsFilter({ shard: 1 });
122+
123+
const mockElasticEvents = [
124+
generateMockEvent(),
125+
generateMockEvent({ _id: "5d4a7cd39caf55aaaef038d2fe5fd864b01db2170253c158-1-1", identifier: 'ESDTNFTCreate' }),
126+
];
127+
128+
const expectedEvents = [
129+
createExpectedEvent("7e3faa2a4ea5cfe8667f2e13eb27076b0452742dbe01044871c8ea109f73ebed", "transferValueOnly"),
130+
createExpectedEvent("5d4a7cd39caf55aaaef038d2fe5fd864b01db2170253c158-1-1", "ESDTNFTCreate"),
131+
];
132+
133+
mockIndexerService.getEvents.mockResolvedValue(mockElasticEvents);
134+
135+
const result = await service.getEvents(pagination, filter);
136+
137+
expect(result).toEqual(expectedEvents);
138+
expect(indexerService.getEvents).toHaveBeenCalledWith(pagination, filter);
139+
});
96140
});
97141

98142
describe('getEventsCount', () => {

0 commit comments

Comments
 (0)