Skip to content

Commit 7b8da47

Browse files
committed
chore: remove mixup of filter and fields in v3 publish
1 parent af6c81d commit 7b8da47

File tree

4 files changed

+32
-94
lines changed

4 files changed

+32
-94
lines changed
Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,53 @@
11
import { Inject, Injectable, PipeTransform, Scope } from "@nestjs/common";
22
import { REQUEST } from "@nestjs/core";
33
import { Request } from "express";
4-
import { omit } from "lodash";
4+
import { IPublishedDataFilters } from "../interfaces/published-data.interface";
55

66
function addRegisteredStatusToJson(
7-
json: Record<string, string>,
7+
filter: IPublishedDataFilters,
88
isAuthenticated = false,
99
) {
10-
if (isAuthenticated) return json;
11-
return { ...json, status: "registered" };
10+
if (isAuthenticated) return filter;
11+
filter.where = {
12+
...filter.where,
13+
status: "registered",
14+
};
15+
return filter;
1216
}
1317

1418
@Injectable({ scope: Scope.REQUEST })
1519
export class RegisteredFilterPipe implements PipeTransform<
16-
{ filter?: string; fields?: string; limits?: string },
17-
{ filter?: string; fields?: string; limits?: string }
20+
{ filter?: IPublishedDataFilters },
21+
{ filter?: IPublishedDataFilters }
1822
> {
1923
constructor(@Inject(REQUEST) private readonly request: Request) {}
2024

21-
transform(value: { filter?: string; fields?: string; limits?: string }) {
22-
const jsonFields = JSON.parse(value?.fields || "{}");
25+
transform(value: { filter?: IPublishedDataFilters }) {
2326
const withRegistered = addRegisteredStatusToJson(
24-
jsonFields,
27+
value?.filter ?? {},
2528
this.request.isAuthenticated(),
2629
);
27-
return { ...value, fields: JSON.stringify(withRegistered) };
30+
return { filter: withRegistered };
2831
}
2932
}
3033

3134
@Injectable({ scope: Scope.REQUEST })
3235
export class RegisteredPipe implements PipeTransform<
33-
Record<string, string>,
34-
Record<string, string>
36+
IPublishedDataFilters,
37+
IPublishedDataFilters
3538
> {
3639
constructor(@Inject(REQUEST) private readonly request: Request) {}
3740

38-
transform(value: Record<string, string>) {
41+
transform(value: IPublishedDataFilters) {
3942
return addRegisteredStatusToJson(value, this.request.isAuthenticated());
4043
}
4144
}
4245

4346
export class IdToDoiPipe implements PipeTransform<
4447
{ id: string },
45-
{ doi: string }
48+
{ where: { doi: string } }
4649
> {
4750
transform(value: { id: string }) {
48-
return { ...omit(value, "id"), doi: value.id };
51+
return { where: { doi: value.id } };
4952
}
5053
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { FilterPipe } from "src/common/pipes/filter.pipe";
22
import { PublishedData } from "../schemas/published-data.schema";
33
import { publishedDataV3toV4FieldMap } from "../dto/published-data.obsolete.dto";
4-
import { JsonToStringPipe } from "src/common/pipes/json-to-string.pipe";
54

65
export const V3_FILTER_TO_V4_PIPE = [
76
new FilterPipe<PublishedData>({ apiToDBMap: publishedDataV3toV4FieldMap }),
8-
new JsonToStringPipe("fields"),
97
];

src/published-data/published-data.controller.ts

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
ApiTags,
3030
} from "@nestjs/swagger";
3131
import { plainToInstance } from "class-transformer";
32-
import { FilterQuery, QueryOptions } from "mongoose";
32+
import { QueryOptions } from "mongoose";
3333
import { firstValueFrom } from "rxjs";
3434
import { AttachmentsService } from "src/attachments/attachments.service";
3535
import { AllowAny } from "src/auth/decorators/allow-any.decorator";
@@ -65,10 +65,7 @@ import {
6565
RegisteredPipe,
6666
} from "./pipes/registered.pipe";
6767
import { PublishedDataService } from "./published-data.service";
68-
import {
69-
PublishedData,
70-
PublishedDataDocument,
71-
} from "./schemas/published-data.schema";
68+
import { PublishedData } from "./schemas/published-data.schema";
7269
import { V3_FILTER_TO_V4_PIPE } from "./pipes/v3-filter.pipe";
7370

7471
@ApiBearerAuth()
@@ -272,16 +269,6 @@ export class PublishedDataController {
272269
description: "Database filters to apply when retrieve all published data",
273270
required: false,
274271
})
275-
@ApiQuery({
276-
name: "limits",
277-
description: "Database limits to apply when retrieve all published data",
278-
required: false,
279-
})
280-
@ApiQuery({
281-
name: "fields",
282-
description: "Database fields to apply apply filters on",
283-
required: false,
284-
})
285272
@ApiResponse({
286273
status: HttpStatus.OK,
287274
type: PublishedDataObsoleteDto,
@@ -296,25 +283,9 @@ export class PublishedDataController {
296283
@Query(...V3_FILTER_TO_V4_PIPE, RegisteredFilterPipe)
297284
filter?: {
298285
filter: IPublishedDataFilters;
299-
fields: string;
300-
limits: string;
301286
},
302287
): Promise<PublishedDataObsoleteDto[]> {
303288
const publishedDataFilters: IPublishedDataFilters = filter?.filter ?? {};
304-
const publishedDataLimits: {
305-
skip: number;
306-
limit: number;
307-
order: string;
308-
} = JSON.parse(filter?.limits ?? "{}");
309-
const publishedDataFields = JSON.parse(filter?.fields ?? "{}");
310-
311-
if (!publishedDataFilters.limits) {
312-
publishedDataFilters.limits = publishedDataLimits;
313-
}
314-
if (!publishedDataFilters.fields) {
315-
publishedDataFilters.fields = publishedDataFields;
316-
}
317-
318289
const fetchedData =
319290
await this.publishedDataService.findAll(publishedDataFilters);
320291

@@ -344,23 +315,12 @@ export class PublishedDataController {
344315
@Query(...V3_FILTER_TO_V4_PIPE, RegisteredFilterPipe)
345316
filter?: {
346317
filter: IPublishedDataFilters;
347-
fields: string;
348-
limits: string;
349318
},
350319
) {
351-
const jsonFilters: IPublishedDataFilters = filter?.filter ?? {};
352-
const jsonFields: FilterQuery<PublishedDataDocument> = filter?.fields
353-
? JSON.parse(filter.fields)
354-
: {};
355-
356-
const filters: FilterQuery<PublishedDataDocument> = {
357-
where: jsonFilters,
358-
fields: jsonFields,
359-
};
360-
320+
const filters: IPublishedDataFilters = filter?.filter ?? {};
361321
const options: QueryOptions = {
362-
limit: jsonFilters?.limits?.limit,
363-
skip: jsonFilters?.limits?.skip,
322+
limit: filters?.limits?.limit,
323+
skip: filters?.limits?.skip,
364324
};
365325

366326
return this.publishedDataService.countDocuments(filters, options);
@@ -454,11 +414,14 @@ export class PublishedDataController {
454414
})
455415
async findOne(
456416
@Param(new IdToDoiPipe(), RegisteredPipe)
457-
idFilter: {
458-
doi: string;
459-
registered?: string;
417+
filter: {
418+
where: {
419+
doi: string;
420+
registered?: string;
421+
};
460422
},
461423
): Promise<PublishedDataObsoleteDto> {
424+
const idFilter = filter.where;
462425
const publishedData = await this.publishedDataService.findOne(idFilter);
463426
if (!publishedData) {
464427
throw new NotFoundException(

src/published-data/published-data.service.ts

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { firstValueFrom } from "rxjs";
1717
import { JWTUser } from "src/auth/interfaces/jwt-user.interface";
1818
import {
1919
addCreatedByFields,
20-
createFullqueryFilter,
2120
handleAxiosRequestError,
2221
parseLimitFilters,
2322
} from "src/common/utils";
@@ -79,47 +78,22 @@ export class PublishedDataService {
7978
}
8079

8180
async findAll(filter: IPublishedDataFilters): Promise<PublishedData[]> {
82-
const whereFilter: FilterQuery<PublishedDataDocument> = filter.where ?? {};
83-
const fields = filter.fields ?? {};
84-
const filterQuery: FilterQuery<PublishedDataDocument> =
85-
createFullqueryFilter<PublishedDataDocument>(
86-
this.publishedDataModel,
87-
"doi",
88-
fields,
89-
);
90-
const whereClause: FilterQuery<PublishedDataDocument> = {
91-
...filterQuery,
92-
...whereFilter,
93-
};
9481
const { limit, skip, sort } = parseLimitFilters(filter.limits);
95-
9682
return this.publishedDataModel
97-
.find(whereClause)
83+
.find(filter.where ?? {})
9884
.limit(limit)
9985
.skip(skip)
10086
.sort(sort)
87+
.select(filter.fields ?? {})
10188
.exec();
10289
}
10390

10491
async countDocuments(
10592
filter: FilterQuery<PublishedDataDocument>,
10693
options?: object,
10794
): Promise<ICount> {
108-
const whereFilter: FilterQuery<PublishedDataDocument> = filter.where ?? {};
109-
const fields = filter.fields ?? {};
110-
const filterQuery: FilterQuery<PublishedDataDocument> =
111-
createFullqueryFilter<PublishedDataDocument>(
112-
this.publishedDataModel,
113-
"doi",
114-
fields,
115-
);
116-
const whereClause: FilterQuery<PublishedDataDocument> = {
117-
...filterQuery,
118-
...whereFilter,
119-
};
120-
12195
const count = await this.publishedDataModel
122-
.countDocuments(whereClause, options)
96+
.countDocuments(filter.where ?? {}, options)
12397
.exec();
12498
return { count };
12599
}

0 commit comments

Comments
 (0)