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) { 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) { diff --git a/lib/usecases/log/GetAllLogsUseCase.js b/lib/usecases/log/GetAllLogsUseCase.js index b1f7ea72b5..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 @@ -73,9 +74,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) { diff --git a/lib/usecases/run/GetAllRunsUseCase.js b/lib/usecases/run/GetAllRunsUseCase.js index df1b5f7f5b..819dae8095 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) { diff --git a/lib/utilities/setTimeRangeQuery.js b/lib/utilities/setTimeRangeQuery.js new file mode 100644 index 0000000000..ced721ce0f --- /dev/null +++ b/lib/utilities/setTimeRangeQuery.js @@ -0,0 +1,25 @@ +/** + * @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. + */ + +/** + * 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} queryBuilder queryBuider instance in which the time range will be set. + * @returns {void} + */ +exports.setTimeRangeQuery = ({ from = 0, to = Date.now() }, attribute, queryBuilder) => + queryBuilder.where(attribute).between(from, to);