diff --git a/src/common/interfaces/common.interface.ts b/src/common/interfaces/common.interface.ts index 437d643ee..a42da4fca 100644 --- a/src/common/interfaces/common.interface.ts +++ b/src/common/interfaces/common.interface.ts @@ -35,9 +35,9 @@ export interface IProposalAcceptedMessage { } export interface ILimitsFilter { - limit: number; - skip: number; - order: string; + limit?: number; + skip?: number; + order?: string; } export interface IFilters { @@ -69,14 +69,17 @@ export interface IDatafileFilter { type?: string; } -export type IFiltersV4 = IFilters & { +export type IFiltersV4 = Pick< + IFilters, + "where" +> & { include?: Z; limits?: ILimitsV4; fields?: (keyof Y)[]; }; export interface ILimitsV4 { - limit: number; - skip: number; - sort: Record; + limit?: number; + skip?: number; + sort?: Record; } diff --git a/src/datasets/datasets.service.ts b/src/datasets/datasets.service.ts index bdb37064c..86d4ff03d 100644 --- a/src/datasets/datasets.service.ts +++ b/src/datasets/datasets.service.ts @@ -332,49 +332,19 @@ export class DatasetsService { } async findOneComplete( - filter: FilterQuery, + filter: IDatasetFiltersV4, ): Promise { - const whereFilter: FilterQuery = filter.where ?? {}; - let fieldsProjection: string[] = filter.fields ?? {}; - - const limits: QueryOptions = filter.limits ?? { + filter.limits = filter.limits ?? { skip: 0, - sort: { createdAt: "desc" }, + sort: { createdAt: "desc" } as Record< + keyof DatasetDocument, + "asc" | "desc" + >, }; - const pipeline: PipelineStage[] = [{ $match: whereFilter }]; - const addedRelations = this.addLookupFields(pipeline, filter.include); - - if (Array.isArray(fieldsProjection)) { - fieldsProjection = Array.from( - new Set([...fieldsProjection, ...addedRelations]), - ); - } - - if (!isEmpty(fieldsProjection)) { - const projection = parsePipelineProjection(fieldsProjection); - pipeline.push({ $project: projection }); - } + const [data] = await this.findAllComplete(filter); - if (!isEmpty(limits.sort)) { - const sort = parsePipelineSort(limits.sort); - pipeline.push({ $sort: sort }); - } - - pipeline.push({ $skip: limits.skip || 0 }); - - try { - const [data] = await this.datasetModel - .aggregate(pipeline) - .exec(); - - return data || null; - } catch (error) { - if (error instanceof Error) { - throw new BadRequestException(error.message); - } - throw new BadRequestException("An unknown error occurred"); - } + return (data as OutputDatasetDto) || null; } async count( diff --git a/src/datasets/interfaces/dataset-filters.interface.ts b/src/datasets/interfaces/dataset-filters.interface.ts index 1a8ad10d5..a9d40d6d5 100644 --- a/src/datasets/interfaces/dataset-filters.interface.ts +++ b/src/datasets/interfaces/dataset-filters.interface.ts @@ -55,6 +55,8 @@ export interface IDatasetRelation { scope: IDatasetScopes; } -export type IDatasetFiltersV4 = IFiltersV4 & { - include?: DatasetLookupKeysEnum[] | IDatasetRelation[]; -}; +export type IDatasetFiltersV4 = IFiltersV4< + T, + Y, + DatasetLookupKeysEnum[] | IDatasetRelation[] +>; diff --git a/test/DatasetV4.js b/test/DatasetV4.js index 58b849b85..739cef888 100644 --- a/test/DatasetV4.js +++ b/test/DatasetV4.js @@ -853,6 +853,7 @@ describe("2500: Datasets v4 tests", () => { skip: 0, sort: { datasetName: "asc", + createdAt: "asc", }, }, };