diff --git a/src/core/interceptors/page.interceptor.ts b/src/core/interceptors/page.interceptor.ts index 6efaf93..73c2089 100644 --- a/src/core/interceptors/page.interceptor.ts +++ b/src/core/interceptors/page.interceptor.ts @@ -1,6 +1,6 @@ import { HttpService } from "@nestjs/axios"; import { CACHE_MANAGER, CallHandler, ExecutionContext, Inject, Injectable, NestInterceptor } from "@nestjs/common"; -import { Observable, map, take, switchMap } from "rxjs"; +import { Observable, map, take, switchMap, of } from "rxjs"; import { PageDto } from "../domain/dtos"; import { EsQueryDto } from "../domain/dtos/elastic/es-query.dto"; import { RequestDto } from "../domain/dtos/request.dto"; @@ -50,6 +50,11 @@ export class PageInterceptor implements NestInterceptor { const limit = !query.limit ? 10 : query.limit; const order = !query.order ? Order.DESC : query.order; + const prev_page = await this.cacheManager.get('prev_page'); + if (prev_page) { + if (offset == prev_page[1] && limit == prev_page[2] && order == prev_page[3]) return of(prev_page[0]); + } + // Contruct a body for querying Elasticsearch request.es_query = new EsQueryDto(); request.es_query.query = { @@ -60,14 +65,6 @@ export class PageInterceptor implements NestInterceptor { }; request.es_query.from = offset; request.es_query.size = limit; - request.es_query.sort = [ - { "_score": { "order": order } }, - ]; - - const prev_page = await this.cacheManager.get('prev_page'); - if (prev_page) { - if (offset == prev_page[1] && limit == prev_page[2]) return prev_page[0]; - } return next.handle().pipe( switchMap(async (res) => { @@ -81,10 +78,12 @@ export class PageInterceptor implements NestInterceptor { let data = res.hits.hits; // Omitting the redundant info and leaving only the document data = data.map((el) => el._source); + // Change the order if set + if (order == Order.ASC) data.reverse(); // Cache and return the page const page: PageDto = new PageDto(data, meta); - await this.cacheManager.set('prev_page', [page, offset, limit]); + await this.cacheManager.set('prev_page', [page, offset, limit, order]); return page; }) );