From 939d357fff939f5e89bfbebb7c8042f960716ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Tainon?= Date: Wed, 10 Jun 2026 17:02:19 +0200 Subject: [PATCH] Return only task or user tests --- src/tasks.ts | 57 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/tasks.ts b/src/tasks.ts index 8581ef7..2eadce1 100644 --- a/src/tasks.ts +++ b/src/tasks.ts @@ -149,39 +149,64 @@ export async function findTaskById(taskId: string): Promise { return await Db.querySingleResult('SELECT * FROM tm_tasks WHERE ID = ?', [taskId]); } +export async function getTaskTests(taskId: string, taskTokenData: PlatformTaskTokenData|null): Promise { + if (taskTokenData?.payload.idUser && taskTokenData.platform.ID) { + return await Db.execute(`SELECT * FROM tm_tasks_tests + WHERE idTask = ? + AND ( + (sGroupType = 'User' and idUser = ? and idPlatform = ?) + OR sGroupType IN ('Example', 'Evaluation') + )`, + [ + taskId, + taskTokenData.payload.idUser, + taskTokenData.platform.ID, + ] + ); + } else { + return await Db.execute(`SELECT * FROM tm_tasks_tests + WHERE idTask = ? AND sGroupType IN ('Example', 'Evaluation')`, + [ + taskId, + ] + ); + } +} + export async function getTask(taskId: string, taskParameters: TaskQueryParameters): Promise { const task = await findTaskById(taskId); if (null === task) { return null; } - const taskLimits = await Db.execute('SELECT * FROM tm_tasks_limits WHERE idTask = ?', [taskId]); - const taskStrings = await Db.execute('SELECT * FROM tm_tasks_strings WHERE idTask = ?', [taskId]); - const taskSubtasks = await Db.execute('SELECT * FROM tm_tasks_subtasks WHERE idTask = ?', [taskId]); - const taskTests = await Db.execute('SELECT * FROM tm_tasks_tests WHERE idTask = ?', [taskId]); - let accessSolution = false; - let taskSourceCodes: SourceCode[]|null = null; let taskTokenData: PlatformTaskTokenData|null = null; if (taskParameters?.token) { taskTokenData = await extractPlatformTaskTokenData(taskParameters.token, taskParameters.platform, taskId); if (taskTokenData.payload.bAccessSolutions) { accessSolution = true; } - if (taskTokenData.payload) { - taskSourceCodes = await Db.execute( - 'SELECT * FROM tm_source_codes WHERE idTask = ? AND ((idUser = ? and idPlatform = ?) OR `sType` = \'Task\' OR `sType` = \'Solution\')', - [ - taskId, - taskTokenData.payload.idUser, - taskTokenData.platform.ID, - ] - ); - } } else if (appConfig.testMode.accessSolutions) { accessSolution = true; } + const taskLimits = await Db.execute('SELECT * FROM tm_tasks_limits WHERE idTask = ?', [taskId]); + const taskStrings = await Db.execute('SELECT * FROM tm_tasks_strings WHERE idTask = ?', [taskId]); + const taskSubtasks = await Db.execute('SELECT * FROM tm_tasks_subtasks WHERE idTask = ?', [taskId]); + const taskTests = await getTaskTests(taskId, taskTokenData); + + let taskSourceCodes: SourceCode[]|null = null; + if (taskTokenData?.payload) { + taskSourceCodes = await Db.execute( + 'SELECT * FROM tm_source_codes WHERE idTask = ? AND ((idUser = ? and idPlatform = ?) OR `sType` = \'Task\' OR `sType` = \'Solution\')', + [ + taskId, + taskTokenData?.payload.idUser, + taskTokenData?.platform.ID, + ] + ); + } + if (null === taskSourceCodes) { taskSourceCodes = await Db.execute('SELECT * FROM tm_source_codes WHERE idTask = ? AND (`sType` = \'Task\' OR `sType` = \'Solution\')', [taskId]); }