From c0df280ed0e5441d99c5c80fb77ba0421aa968f5 Mon Sep 17 00:00:00 2001 From: virgilchiriac Date: Fri, 24 Jan 2025 19:26:05 +0100 Subject: [PATCH] fix query --- .../deletion-execution.console.ts | 4 +- .../repo/scope/deletion-request-scope.spec.ts | 63 +++++++++++++++++-- .../repo/scope/deletion-request-scope.ts | 17 ++--- 3 files changed, 70 insertions(+), 14 deletions(-) diff --git a/apps/server/src/modules/deletion-console/deletion-execution.console.ts b/apps/server/src/modules/deletion-console/deletion-execution.console.ts index 6915420b2fd..4d97390130e 100644 --- a/apps/server/src/modules/deletion-console/deletion-execution.console.ts +++ b/apps/server/src/modules/deletion-console/deletion-execution.console.ts @@ -15,14 +15,14 @@ export class DeletionExecutionConsole { { flags: '-l, --limit ', /* istanbul ignore next */ - fn: (value: string) => (value ? Number(value) : undefined), + fn: (value: string) => (value ? Number(value) : undefined), // NOSONAR description: 'Limit of the requested deletion executions that should be performed.', required: false, }, { flags: '-f, --runFailed ', /* istanbul ignore next */ - fn: (value: string) => /^(true|yes|1)$/i.test(value), + fn: (value: string) => /^(true|yes|1)$/i.test(value), // NOSONAR description: 'Limit of the requested deletion executions that should be performed.', required: false, }, diff --git a/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.spec.ts b/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.spec.ts index 7149eebeee7..2966cbd62e8 100644 --- a/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.spec.ts +++ b/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.spec.ts @@ -41,21 +41,54 @@ describe(DeletionRequestScope.name, () => { status: { $in: [StatusModel.FAILED, StatusModel.PENDING], }, - updatedAt: { - $lt: olderThan, - }, + $and: [ + { + updatedAt: { + $lt: olderThan, + }, + }, + ], }; const expectedQueryNewer = { status: { $in: [StatusModel.FAILED, StatusModel.PENDING], }, - updatedAt: { - $gte: newerThan, + $and: [ + { + updatedAt: { + $gte: newerThan, + }, + }, + ], + }; + const expectedQueryOlderAndNewer = { + status: { + $in: [StatusModel.FAILED, StatusModel.PENDING], }, + $and: [ + { + updatedAt: { + $lt: olderThan, + }, + }, + { + updatedAt: { + $gte: newerThan, + }, + }, + ], }; + const expectedQueryNoDates = { + status: { + $in: [StatusModel.FAILED, StatusModel.PENDING], + }, + }; + return { expectedQueryOlder, expectedQueryNewer, + expectedQueryOlderAndNewer, + expectedQueryNoDates, olderThan, newerThan, }; @@ -80,6 +113,26 @@ describe(DeletionRequestScope.name, () => { expect(scope.query).toEqual(expectedQueryNewer); }); }); + describe('when olderThan and newerThan are set', () => { + it('should add query', () => { + const { expectedQueryOlderAndNewer, olderThan, newerThan } = setup(); + + const result = scope.byStatusAndDate([StatusModel.FAILED, StatusModel.PENDING], olderThan, newerThan); + + expect(result).toBeInstanceOf(DeletionRequestScope); + expect(scope.query).toEqual(expectedQueryOlderAndNewer); + }); + }); + describe('when olderThan and newerThan are not set', () => { + it('should add query', () => { + const { expectedQueryNoDates } = setup(); + + const result = scope.byStatusAndDate([StatusModel.FAILED, StatusModel.PENDING]); + + expect(result).toBeInstanceOf(DeletionRequestScope); + expect(scope.query).toEqual(expectedQueryNoDates); + }); + }); }); describe('byStatusAndDate for Pending', () => { diff --git a/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.ts b/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.ts index 116c8aca393..5c0d00f5415 100644 --- a/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.ts +++ b/apps/server/src/modules/deletion/repo/scope/deletion-request-scope.ts @@ -1,4 +1,5 @@ import { Scope } from '@shared/repo/scope'; +import { FilterQuery } from '@mikro-orm/core'; import { DeletionRequestEntity } from '../entity'; import { StatusModel } from '../../domain/types'; @@ -10,19 +11,21 @@ export class DeletionRequestScope extends Scope { } byStatusAndDate(status: StatusModel[], olderThan?: Date, newerThan?: Date): this { - let query = { status: { $in: status } }; + const query: FilterQuery = { status: { $in: status } }; + + const dateConditions: FilterQuery[] = []; if (olderThan) { - const olderThanQuery = { updatedAt: { $lt: olderThan } }; - query = { ...query, ...olderThanQuery }; + dateConditions.push({ updatedAt: { $lt: olderThan } }); } - if (newerThan) { - const newerThanQuery = { updatedAt: { $gte: newerThan } }; - query = { ...query, ...newerThanQuery }; + dateConditions.push({ updatedAt: { $gte: newerThan } }); } - this.addQuery(query); + if (dateConditions.length > 0) { + query.$and = dateConditions; + } + this.addQuery(query); return this; } }