From e99cbfe71d33f26d35748924c26fe3ae71ad22ef Mon Sep 17 00:00:00 2001 From: George Raduta Date: Fri, 8 May 2026 18:28:19 +0200 Subject: [PATCH 1/2] Sort data passes by id and not name --- lib/server/controllers/lhcPeriodStatistics.controller.js | 2 +- lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/server/controllers/lhcPeriodStatistics.controller.js b/lib/server/controllers/lhcPeriodStatistics.controller.js index c70b04b67c..8784e3871e 100644 --- a/lib/server/controllers/lhcPeriodStatistics.controller.js +++ b/lib/server/controllers/lhcPeriodStatistics.controller.js @@ -42,7 +42,7 @@ const listLhcPeriodStatisticsHandler = async (req, res) => { ); if (validatedDTO) { try { - const { filter, page: { limit = ApiConfig.pagination.limit, offset } = {}, sort = { name: 'DESC' } } = validatedDTO.query; + const { filter, page: { limit = ApiConfig.pagination.limit, offset } = {}, sort = { id: 'DESC' } } = validatedDTO.query; const { count, rows: items } = await lhcPeriodStatisticsService.getAllForPhysicsRuns({ filter, limit, diff --git a/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js b/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js index 4e92ae675e..f9b803144d 100644 --- a/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js +++ b/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js @@ -85,11 +85,13 @@ class LhcPeriodStatisticsService { sort, } = {}) { const queryBuilder = this.prepareQueryBuilder(); - if (sort) { for (const property in sort) { let expression; switch (property) { + case 'id': + expression = (sequelize) => sequelize.col('`lhcPeriod`.`id`');; + break; case 'name': expression = (sequelize) => sequelize.col('`lhcPeriod`.`name`'); break; From acb660a22f8b8faeffe3ab457820757770c95e06 Mon Sep 17 00:00:00 2001 From: George Raduta Date: Wed, 20 May 2026 08:27:37 +0200 Subject: [PATCH 2/2] Use expression map instead of switch --- .../lhcPeriod/LhcPeriodStatisticsService.js | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js b/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js index f9b803144d..a64c5566ee 100644 --- a/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js +++ b/lib/server/services/lhcPeriod/LhcPeriodStatisticsService.js @@ -21,6 +21,12 @@ const { NotFoundError } = require('../../errors/NotFoundError'); const { RunDefinition } = require('../../../domain/enums/RunDefinition.js'); const { NonPhysicsProductionsNamesWords } = require('../../../domain/enums/NonPhysicsProductionsNamesWords.js'); +const sortExpressionMap = { + name: (sequelize) => sequelize.col('`lhcPeriod`.`name`'), + year: (sequelize) => sequelize.literal('SUBSTRING(lhcPeriod.name, 4, 2)'), + pdpBeamTypes: (sequelize) => sequelize.literal('pdpBeamTypes'), +}; + /** * @typedef LhcPeriodIdentifier object to uniquely identify a lhc period * @property {string} [name] the lhc period name @@ -87,22 +93,7 @@ class LhcPeriodStatisticsService { const queryBuilder = this.prepareQueryBuilder(); if (sort) { for (const property in sort) { - let expression; - switch (property) { - case 'id': - expression = (sequelize) => sequelize.col('`lhcPeriod`.`id`');; - break; - case 'name': - expression = (sequelize) => sequelize.col('`lhcPeriod`.`name`'); - break; - case 'year': - expression = (sequelize) => sequelize.literal('SUBSTRING(lhcPeriod.name, 4, 2)'); - break; - case 'pdpBeamTypes': - expression = (sequelize) => sequelize.literal('pdpBeamTypes'); - break; - } - + const expression = sortExpressionMap[property]; queryBuilder.orderBy(expression ?? property, sort[property]); } }