From 8ab2a60b1fe3ecef576441328fe52baa135bf7fa Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 23 Feb 2026 14:11:40 +0100 Subject: [PATCH 1/7] feat: create setTimeRangeQuery --- lib/utilities/setTimeRangeQuery.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 lib/utilities/setTimeRangeQuery.js diff --git a/lib/utilities/setTimeRangeQuery.js b/lib/utilities/setTimeRangeQuery.js new file mode 100644 index 0000000000..35668da265 --- /dev/null +++ b/lib/utilities/setTimeRangeQuery.js @@ -0,0 +1,28 @@ +/** + * @license + * Copyright CERN and copyright holders of ALICE O2. This software is + * distributed under the terms of the GNU General Public License v3 (GPL + * Version 3), copied verbatim in the file "COPYING". + * + * See http://alice-o2.web.cern.ch/license for full licensing information. + * + * In applying this license CERN does not waive the privileges and immunities + * granted to it by virtue of its status as an Intergovernmental Organization + * or submit itself to any jurisdiction. + */ + +import { QueryBuilder } from "../database/utilities/QueryBuilder"; + +/** + * function that sets a time range in a QueryBuilder. + * + * @param {object} timerange an object that defines a time range to add to the query + * @param {number} timerange.from the lower bound of the time range + * @param {number} timerange.to the upper bound of the time range + * @param {string} attribute the model attribute for which the range will be set + * @param {QueryBuilder} attribute queryBuider instance in which the time range will be set. + * @returns {void} + */ +export function setTimeRangeQuery({ from = 0, to = Date.now() }, attribute, queryBuilder) { + queryBuilder.where(attribute).between(from, to); +} \ No newline at end of file From 7f3ff5e2fce963f44a59be95c6ec5f686eae422c Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 23 Feb 2026 14:14:32 +0100 Subject: [PATCH 2/7] feat: implement setTimeRangeQuery in GetAllRunsUseCase --- lib/usecases/run/GetAllRunsUseCase.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/usecases/run/GetAllRunsUseCase.js b/lib/usecases/run/GetAllRunsUseCase.js index df1b5f7f5b..0f93f97871 100644 --- a/lib/usecases/run/GetAllRunsUseCase.js +++ b/lib/usecases/run/GetAllRunsUseCase.js @@ -25,6 +25,7 @@ const { qcFlagSummaryService } = require('../../server/services/qualityControlFl const { DetectorType } = require('../../domain/enums/DetectorTypes.js'); const { unpackNumberRange } = require('../../utilities/rangeUtils.js'); const { splitStringToStringsTrimmed } = require('../../utilities/stringUtils.js'); +const { setTimeRangeQuery } = require('../../utilities/setTimeRangeQuery.js'); /** * GetAllRunsUseCase @@ -151,21 +152,15 @@ class GetAllRunsUseCase { } if (o2start) { - const from = o2start.from !== undefined ? o2start.from : 0; - const to = o2start.to !== undefined ? o2start.to : new Date().getTime(); - filteringQueryBuilder.where('timeO2Start').between(from, to); + setTimeRangeQuery(o2start, 'timeO2Start', filteringQueryBuilder); } - + if (o2end) { - const from = o2end.from !== undefined ? o2end.from : 0; - const to = o2end.to !== undefined ? o2end.to : new Date().getTime(); - filteringQueryBuilder.where('timeO2End').between(from, to); + setTimeRangeQuery(o2end, 'timeO2End', filteringQueryBuilder); } - + if (updatedAt) { - const from = updatedAt.from ?? 0; - const to = updatedAt.to ?? new Date().getTime(); - filteringQueryBuilder.where('updatedAt').between(from, to); + setTimeRangeQuery(updatedAt, 'updatedAt', filteringQueryBuilder); } if (triggerValues) { From 7cc09e5918141a5025b9da736f78498c7937d389 Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 23 Feb 2026 14:25:35 +0100 Subject: [PATCH 3/7] feat: implement setTimeRangeQuery in GetAllLogsUseCase --- lib/usecases/log/GetAllLogsUseCase.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/usecases/log/GetAllLogsUseCase.js b/lib/usecases/log/GetAllLogsUseCase.js index b1f7ea72b5..91f45aa9aa 100644 --- a/lib/usecases/log/GetAllLogsUseCase.js +++ b/lib/usecases/log/GetAllLogsUseCase.js @@ -73,9 +73,7 @@ const applyFilter = async (dataSource, queryBuilder, filter) => { } if (created) { - const from = created.from !== undefined ? created.from : 0; - const to = created.to !== undefined ? created.to : new Date().getTime(); - queryBuilder.where('createdAt').between(from, to); + setTimeRangeQuery(created, 'createdAt', queryBuilder); } if (origin) { From 56d86261915d365a9a8a137affefd666ed5ea18b Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 23 Feb 2026 14:25:49 +0100 Subject: [PATCH 4/7] feat: implement setTimeRangeQuery in GetAllEnvirionmentsUseCase --- lib/usecases/environment/GetAllEnvironmentsUseCase.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/usecases/environment/GetAllEnvironmentsUseCase.js b/lib/usecases/environment/GetAllEnvironmentsUseCase.js index c742c53b62..365a7a32b8 100644 --- a/lib/usecases/environment/GetAllEnvironmentsUseCase.js +++ b/lib/usecases/environment/GetAllEnvironmentsUseCase.js @@ -23,6 +23,7 @@ const { dataSource } = require('../../database/DataSource.js'); const { statusAcronyms } = require('../../domain/enums/StatusAcronyms.js'); const { unpackNumberRange } = require('../../utilities/rangeUtils.js'); const { splitStringToStringsTrimmed } = require('../../utilities/stringUtils.js'); +const { setTimeRangeQuery } = require('../../utilities/setTimeRangeQuery.js'); /** * Subquery to select the latest history item for each environment. @@ -93,9 +94,7 @@ class GetAllEnvironmentsUseCase { const filterQueryBuilder = prepareQueryBuilder(); if (created) { - const from = created.from !== undefined ? created.from : 0; - const to = created.to !== undefined ? created.to : Date.now(); - filterQueryBuilder.where('createdAt').between(from, to); + setTimeRangeQuery(created, 'createdAt', filterQueryBuilder); } if (idsExpression) { From 4bd60c627e9afb72935c66dbfa53aecc7674a0cb Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 23 Feb 2026 14:26:30 +0100 Subject: [PATCH 5/7] fix documentation --- lib/usecases/log/GetAllLogsUseCase.js | 1 + lib/usecases/run/GetAllRunsUseCase.js | 4 ++-- lib/utilities/setTimeRangeQuery.js | 10 ++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/usecases/log/GetAllLogsUseCase.js b/lib/usecases/log/GetAllLogsUseCase.js index 91f45aa9aa..f5e2f41c1c 100644 --- a/lib/usecases/log/GetAllLogsUseCase.js +++ b/lib/usecases/log/GetAllLogsUseCase.js @@ -29,6 +29,7 @@ const { ApiConfig } = require('../../config/index.js'); const { Op } = require('sequelize'); const { dataSource } = require('../../database/DataSource.js'); const { checkForFilterExclusion } = require('../common/checkForFilterExclusion.js'); +const { setTimeRangeQuery } = require('../../utilities/setTimeRangeQuery.js'); /** * Apply the given filter on the given query builder diff --git a/lib/usecases/run/GetAllRunsUseCase.js b/lib/usecases/run/GetAllRunsUseCase.js index 0f93f97871..819dae8095 100644 --- a/lib/usecases/run/GetAllRunsUseCase.js +++ b/lib/usecases/run/GetAllRunsUseCase.js @@ -154,11 +154,11 @@ class GetAllRunsUseCase { if (o2start) { setTimeRangeQuery(o2start, 'timeO2Start', filteringQueryBuilder); } - + if (o2end) { setTimeRangeQuery(o2end, 'timeO2End', filteringQueryBuilder); } - + if (updatedAt) { setTimeRangeQuery(updatedAt, 'updatedAt', filteringQueryBuilder); } diff --git a/lib/utilities/setTimeRangeQuery.js b/lib/utilities/setTimeRangeQuery.js index 35668da265..48aaeb195d 100644 --- a/lib/utilities/setTimeRangeQuery.js +++ b/lib/utilities/setTimeRangeQuery.js @@ -11,18 +11,16 @@ * or submit itself to any jurisdiction. */ -import { QueryBuilder } from "../database/utilities/QueryBuilder"; - /** - * function that sets a time range in a QueryBuilder. - * + * Function that sets a time range in a QueryBuilder. + * * @param {object} timerange an object that defines a time range to add to the query * @param {number} timerange.from the lower bound of the time range * @param {number} timerange.to the upper bound of the time range * @param {string} attribute the model attribute for which the range will be set - * @param {QueryBuilder} attribute queryBuider instance in which the time range will be set. + * @param {QueryBuilder} queryBuilder queryBuider instance in which the time range will be set. * @returns {void} */ export function setTimeRangeQuery({ from = 0, to = Date.now() }, attribute, queryBuilder) { queryBuilder.where(attribute).between(from, to); -} \ No newline at end of file +} From e673c1609e4e3226f0a4699071ffb6c577c480ef Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 24 Feb 2026 14:43:17 +0100 Subject: [PATCH 6/7] use new function in GetAllLhcFillsUseCase --- lib/usecases/lhcFill/GetAllLhcFillsUseCase.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/usecases/lhcFill/GetAllLhcFillsUseCase.js b/lib/usecases/lhcFill/GetAllLhcFillsUseCase.js index 4315cf9e1a..f69ed2de34 100644 --- a/lib/usecases/lhcFill/GetAllLhcFillsUseCase.js +++ b/lib/usecases/lhcFill/GetAllLhcFillsUseCase.js @@ -24,6 +24,7 @@ const { ApiConfig } = require('../../config/index.js'); const { RunDefinition } = require('../../domain/enums/RunDefinition.js'); const { unpackNumberRange } = require('../../utilities/rangeUtils.js'); const { splitStringToStringsTrimmed } = require('../../utilities/stringUtils.js'); +const { setTimeRangeQuery } = require('../../utilities/setTimeRangeQuery.js'); /** * GetAllLhcFillsUseCase @@ -54,15 +55,11 @@ class GetAllLhcFillsUseCase { } if (stableBeamsStart) { - const from = stableBeamsStart.from !== undefined ? stableBeamsStart.from : 0; - const to = stableBeamsStart.to !== undefined ? stableBeamsStart.to : new Date().getTime(); - queryBuilder.where('stableBeamsStart').between(from, to); + setTimeRangeQuery(stableBeamsStart, 'stableBeamsStart', queryBuilder); } if (stableBeamsEnd) { - const from = stableBeamsEnd.from !== undefined ? stableBeamsEnd.from : 0; - const to = stableBeamsEnd.to !== undefined ? stableBeamsEnd.to : new Date().getTime(); - queryBuilder.where('stableBeamsEnd').between(from, to); + setTimeRangeQuery(stableBeamsEnd, 'stableBeamsEnd', queryBuilder); } if (fillNumbers) { From 3b000b746e2858052afb67133e8a508c16e85cfb Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Mon, 2 Mar 2026 12:20:29 +0100 Subject: [PATCH 7/7] chore: export CommonJs style --- lib/utilities/setTimeRangeQuery.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/utilities/setTimeRangeQuery.js b/lib/utilities/setTimeRangeQuery.js index 48aaeb195d..ced721ce0f 100644 --- a/lib/utilities/setTimeRangeQuery.js +++ b/lib/utilities/setTimeRangeQuery.js @@ -21,6 +21,5 @@ * @param {QueryBuilder} queryBuilder queryBuider instance in which the time range will be set. * @returns {void} */ -export function setTimeRangeQuery({ from = 0, to = Date.now() }, attribute, queryBuilder) { +exports.setTimeRangeQuery = ({ from = 0, to = Date.now() }, attribute, queryBuilder) => queryBuilder.where(attribute).between(from, to); -}