From e3a6a94283b2a7b88c5a6d085a3bec71ccaf88ca Mon Sep 17 00:00:00 2001 From: STEINNI Date: Mon, 27 Oct 2025 18:48:33 +0000 Subject: [PATCH] list keyframes --- api/keyframes.js | 52 +++++++++++++++++++++++++++++++++++++++++++++--- p42api.js | 9 --------- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/api/keyframes.js b/api/keyframes.js index 3523076..4301859 100644 --- a/api/keyframes.js +++ b/api/keyframes.js @@ -3,12 +3,54 @@ import { uuidv7obj, UUID } from "uuidv7" export const mappings = [ + { method: 'post', url:'/keyframes', handler: 'listKeyframes', middlewares: [authGuard]}, { method: 'put', url:'/keyframes', handler: 'createKeyframe', middlewares: [authGuard]}, { method: 'put', url:'/keyframes/:kfid', handler: 'renameKeyframe', middlewares: [authGuard]}, { method: 'put', url:'/keyframes/:kfid/agents', handler: 'saveKeyframeAgents', middlewares: [authGuard]}, ] export const methods = { + + async listKeyframes(req, res) { + const[isOk, payload, errors] = this.utils.validateMapObject(req.body, + { + 'kfId': ((val, obj) => ( (typeof(val)=='undefined') || (this.utils.isValidUUIDV7(val)) ) ), + 'prevKfId': ((val, obj) => ( (val===null) || (typeof(val)=='undefined') || (this.utils.isValidUUIDV7(val)) ) ), + }, + { + 'kfId': 'kfId', + 'prevKfId': 'prevKfId', + }) + if(!isOk){ + this.err(req, res,`Cannot filter on these criteria ! `, `Validations errors for listing KF : ${errors.join(', ')}`, 400) + return + } + + const conditions = [] + const params = [] + + if (payload.kfid !== undefined) { + conditions.push('ekf_uuid = UUID_TO_BIN(?)') + params.push(kfid) + } + + if(payload.prevKfId !== undefined) { + if(payload.prevKfId === null) { + conditions.push('ekf_prev_uuid IS NULL') + } else { + conditions.push('ekf_prev_uuid = UUID_TO_BIN(?)') + params.push(payload.prevKfId) + } + } + const whereClause = conditions.length ? 'WHERE ' + conditions.join(' AND ') : '' + + const results = await this.db.execute(` + SELECT BIN_TO_UUID(ekf_uuid) AS ekf_uuid, ekf_name, BIN_TO_UUID(ekf_prev_uuid) AS ekf_prev_uuid + FROM p42SIM.edited_keyframes ${whereClause}`, params) + + this.ok(req, res, results) + }, + async createKeyframe(req, res) { const[isOk, payload, errors] = this.utils.validateMapObject(req.body, { @@ -55,13 +97,17 @@ export const methods = { return } - await this.db.execute(` + const [result] = await this.db.execute(` UPDATE p42SIM.edited_keyframes SET ekf_name = ? WHERE (ekf_uuid = ?)`, [payload.kfName, UUID.parse(kfid).bytes]) - - this.ok(req, res, { kfId: kfid }) + + if (result.affectedRows === 0) { + this.err(req, res,`Cannot rename this keyframe ! `, `Non-existin kfId: (${UUID.parse(kfid).toString()})`, 400) + } else { + this.ok(req, res, { kfId: kfid }) + } }, async saveKeyframeAgents(req, res) { diff --git a/p42api.js b/p42api.js index 3dbce16..1d22db4 100755 --- a/p42api.js +++ b/p42api.js @@ -29,16 +29,7 @@ const mysqlCreds = { queueLimit: 0 } - const db = await mysql.createConnection(mysqlCreds) -// { -// host: mysqlCreds.host, -// port: mysqlCreds.port, -// socketPath: mysqlCreds.socketPath, -// database: mysqlCreds.database, -// user: mysqlCreds.user, -// password: mysqlCreds.password -// }); const sessionStore = new MySQLStore({ createDatabaseTable: false,