From a71c92188edd39cc9af68d088d6b2b4a1ffe2151 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Tue, 16 Dec 2025 08:39:32 -0500 Subject: [PATCH 1/8] refactor: small fixes to exec/direct --- core/database/foxx/api/query_router.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index 30de93454..44263c1ea 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -737,7 +737,9 @@ router routePath: basePath + "/exec/direct", status: "Success", description: "Execute published data search query", - extra: results, + extra: { + count: Array.isArray(results) ? results.length : undefined, + }, }); } catch (e) { logger.logRequestFailure({ @@ -747,7 +749,9 @@ router routePath: basePath + "/exec/direct", status: "Failure", description: "Execute published data search query", - extra: results, + extra: { + count: Array.isArray(results) ? results.length : undefined, + }, error: e, }); g_lib.handleException(e, res); From 11acc6931f045b0dce208d00f45d3a08c3136c9e Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Tue, 16 Dec 2025 13:40:23 +0000 Subject: [PATCH 2/8] chore: Auto-format JavaScript files with Prettier --- core/database/foxx/api/query_router.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index 44263c1ea..b9feb526d 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -738,7 +738,7 @@ router status: "Success", description: "Execute published data search query", extra: { - count: Array.isArray(results) ? results.length : undefined, + count: Array.isArray(results) ? results.length : undefined, }, }); } catch (e) { @@ -750,7 +750,7 @@ router status: "Failure", description: "Execute published data search query", extra: { - count: Array.isArray(results) ? results.length : undefined, + count: Array.isArray(results) ? results.length : undefined, }, error: e, }); From 09faf1fd291bbfb741c0ea3b7b81582579a3e786 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Wed, 17 Dec 2025 08:14:51 -0500 Subject: [PATCH 3/8] refactor: small fixes to client logging --- core/database/foxx/api/query_router.js | 60 ++++++++++++-------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index 44263c1ea..65f0cb84c 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -17,7 +17,6 @@ module.exports = router; router .post("/create", function (req, res) { - let client = undefined; let result = undefined; try { g_db._executeTransaction({ @@ -26,9 +25,9 @@ router write: ["q", "owner"], }, action: function () { - client = g_lib.getUserFromClientID(req.queryParams.client); + const client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/create", @@ -93,7 +92,7 @@ router res.send(result); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/create", @@ -103,7 +102,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/create", @@ -136,7 +135,6 @@ router router .post("/update", function (req, res) { - let client = undefined; let result = undefined; try { g_db._executeTransaction({ @@ -145,9 +143,9 @@ router write: ["q", "owner"], }, action: function () { - client = g_lib.getUserFromClientID(req.queryParams.client); + const client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/update", @@ -200,7 +198,7 @@ router }); res.send(result); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/update", @@ -210,7 +208,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/update", @@ -243,12 +241,11 @@ router router .get("/view", function (req, res) { - let client = undefined; let qry = undefined; try { client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/view", @@ -273,7 +270,7 @@ router res.send(qry); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/view", @@ -283,7 +280,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/view", @@ -303,12 +300,11 @@ router router .get("/delete", function (req, res) { - let client = undefined; try { - client = g_lib.getUserFromClientID(req.queryParams.client); + const client = g_lib.getUserFromClientID(req.queryParams.client); var owner; logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/delete", @@ -340,7 +336,7 @@ router g_graph.q.remove(owner._from); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/delete", @@ -351,7 +347,7 @@ router } } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/delete", @@ -371,12 +367,11 @@ router router .get("/list", function (req, res) { - let client = undefined; let result = undefined; try { - client = g_lib.getUserFromClientID(req.queryParams.client); + const client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/list", @@ -418,7 +413,7 @@ router res.send(result); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/list", @@ -431,7 +426,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/list", @@ -651,12 +646,11 @@ function execQuery(client, mode, published, orig_query) { router .get("/exec", function (req, res) { - let client = undefined; let results = undefined; try { client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/exec", @@ -679,7 +673,7 @@ router res.send(results); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/exec", @@ -689,7 +683,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "GET", routePath: basePath + "/exec", @@ -711,11 +705,9 @@ router router .post("/exec/direct", function (req, res) { let results = undefined; - let client = undefined; try { - client = g_lib.getUserFromClientID_noexcept(req.queryParams.client); logger.logRequestStarted({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/exec/direct", @@ -723,6 +715,8 @@ router description: "Execute published data search query", }); + let client = g_lib.getUserFromClientID_noexcept(req.queryParams.client); + const query = { ...req.body, params: JSON.parse(req.body.params), @@ -731,7 +725,7 @@ router res.send(results); logger.logRequestSuccess({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/exec/direct", @@ -743,7 +737,7 @@ router }); } catch (e) { logger.logRequestFailure({ - client: client?._id, + client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], httpVerb: "POST", routePath: basePath + "/exec/direct", From da0dd3272a034c90418e6f5b61a52d6c7a17eec3 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Thu, 8 Jan 2026 13:28:36 -0500 Subject: [PATCH 4/8] refactor: CHECKPOINT --- core/database/foxx/api/query_router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index e5a555f8b..e6fe28265 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -648,7 +648,7 @@ router .get("/exec", function (req, res) { let results = undefined; try { - client = g_lib.getUserFromClientID(req.queryParams.client); + var client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], From c39c821a9782b50b7a4478d24b75b46b943f8789 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Tue, 20 Jan 2026 10:40:03 -0500 Subject: [PATCH 5/8] refactor: query_router basic exec direct test --- core/database/foxx/api/query_router.js | 1 + core/database/foxx/tests/query_router.test.js | 53 +++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index e6fe28265..74cb70d1a 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -242,6 +242,7 @@ router router .get("/view", function (req, res) { let qry = undefined; + let client = null; try { client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ diff --git a/core/database/foxx/tests/query_router.test.js b/core/database/foxx/tests/query_router.test.js index b075e6790..3bb3918c1 100644 --- a/core/database/foxx/tests/query_router.test.js +++ b/core/database/foxx/tests/query_router.test.js @@ -14,7 +14,7 @@ const qry_base_url = `${baseUrl}/qry`; describe("unit_query_router: the Foxx microservice qry_router endpoints", () => { after(function () { - const collections = ["u", "qry"]; + const collections = ["u", "qry", "c", "note", "fake"]; collections.forEach((name) => { let col = db._collection(name); if (col) col.truncate(); @@ -22,7 +22,7 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => }); beforeEach(() => { - const collections = ["u", "qry"]; + const collections = ["u", "qry", "c", "note", "fake"]; collections.forEach((name) => { let col = db._collection(name); if (col) { @@ -33,7 +33,7 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => }); }); - it("should successfully run the create route", () => { + /*it("should successfully run the create route", () => { db.u.save({ _key: "fakeUser", _id: "u/fakeUser", @@ -163,4 +163,51 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => expect(parsed).to.be.an("array"); expect(parsed.length).to.be.greaterThan(0); }); + */ + it("should execute a query directly", () => { + // arrange + const fakeUser = { + _key: "fakeUser", + _id: "u/fakeUser", + name: "Fake User", + email: "fakeuser@datadev.org", + is_admin: true, + max_coll: 5, + max_proj: 5, + max_sav_qry: 10, + }; + + const fakeCol = { + _key: "fakeCol", + _id: "col/fakeCol", + title: "fakeCol", + desc: "This is a fake col" + } + + db.u.save(fakeUser); + + // Save the query and the edge between the query and the user + var request_string = `${qry_base_url}/exec/direct?client=u/fakeUser&owner=u/fakeUser&cols=c/fakeCol&cnt=1&off=0`; + var body = { + qry_begin: "FOR i in fake filter i.owner == @owner ", + qry_end: " sort @off,@cnt RETURN distinct i", + qry_filter: "", + params: "{ \"cnt\": 1, \"off\": 0, \"owner\": \"u/fakeUser\"}", + limit: 10, + mode: 1, + published: false, + }; + +// act + var response = request.post(request_string, { + json: true, + body: body, + headers: { + "x-correlation-id": "test-correlation-id", + }, + }); + + // Assert + expect(response.status).to.equal(200); +}); }); From 2d2e4b55561ccb020f78545745511a83e3c60707 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Tue, 20 Jan 2026 15:41:00 +0000 Subject: [PATCH 6/8] chore: Auto-format JavaScript files with Prettier --- core/database/foxx/api/query_router.js | 2 +- core/database/foxx/tests/query_router.test.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index 74cb70d1a..f9dc4c3b6 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -717,7 +717,7 @@ router }); let client = g_lib.getUserFromClientID_noexcept(req.queryParams.client); - + const query = { ...req.body, params: JSON.parse(req.body.params), diff --git a/core/database/foxx/tests/query_router.test.js b/core/database/foxx/tests/query_router.test.js index 3bb3918c1..64b54feaa 100644 --- a/core/database/foxx/tests/query_router.test.js +++ b/core/database/foxx/tests/query_router.test.js @@ -181,24 +181,24 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => _key: "fakeCol", _id: "col/fakeCol", title: "fakeCol", - desc: "This is a fake col" - } + desc: "This is a fake col", + }; db.u.save(fakeUser); - + // Save the query and the edge between the query and the user var request_string = `${qry_base_url}/exec/direct?client=u/fakeUser&owner=u/fakeUser&cols=c/fakeCol&cnt=1&off=0`; var body = { qry_begin: "FOR i in fake filter i.owner == @owner ", qry_end: " sort @off,@cnt RETURN distinct i", qry_filter: "", - params: "{ \"cnt\": 1, \"off\": 0, \"owner\": \"u/fakeUser\"}", + params: '{ "cnt": 1, "off": 0, "owner": "u/fakeUser"}', limit: 10, mode: 1, published: false, }; -// act + // act var response = request.post(request_string, { json: true, body: body, @@ -209,5 +209,5 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => // Assert expect(response.status).to.equal(200); -}); + }); }); From 12e7b6ced1f65ca8d57cfc694b8b539c248bbea8 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Wed, 21 Jan 2026 08:45:49 -0500 Subject: [PATCH 7/8] refactor: final changes --- core/database/foxx/api/query_router.js | 2 +- core/database/foxx/tests/query_router.test.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/database/foxx/api/query_router.js b/core/database/foxx/api/query_router.js index f9dc4c3b6..06c48a832 100644 --- a/core/database/foxx/api/query_router.js +++ b/core/database/foxx/api/query_router.js @@ -649,7 +649,7 @@ router .get("/exec", function (req, res) { let results = undefined; try { - var client = g_lib.getUserFromClientID(req.queryParams.client); + let client = g_lib.getUserFromClientID(req.queryParams.client); logger.logRequestStarted({ client: req.queryParams.client, correlationId: req.headers["x-correlation-id"], diff --git a/core/database/foxx/tests/query_router.test.js b/core/database/foxx/tests/query_router.test.js index 64b54feaa..bfac40ecb 100644 --- a/core/database/foxx/tests/query_router.test.js +++ b/core/database/foxx/tests/query_router.test.js @@ -33,7 +33,7 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => }); }); - /*it("should successfully run the create route", () => { + it("should successfully run the create route", () => { db.u.save({ _key: "fakeUser", _id: "u/fakeUser", @@ -163,7 +163,7 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => expect(parsed).to.be.an("array"); expect(parsed.length).to.be.greaterThan(0); }); - */ + it("should execute a query directly", () => { // arrange const fakeUser = { From d6b159e9b0ed0b1a71f20f3840523b6661aa6782 Mon Sep 17 00:00:00 2001 From: Austin Hampton Date: Wed, 21 Jan 2026 13:46:27 +0000 Subject: [PATCH 8/8] chore: Auto-format JavaScript files with Prettier --- core/database/foxx/tests/query_router.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/database/foxx/tests/query_router.test.js b/core/database/foxx/tests/query_router.test.js index bfac40ecb..97ad2b52b 100644 --- a/core/database/foxx/tests/query_router.test.js +++ b/core/database/foxx/tests/query_router.test.js @@ -163,7 +163,7 @@ describe("unit_query_router: the Foxx microservice qry_router endpoints", () => expect(parsed).to.be.an("array"); expect(parsed.length).to.be.greaterThan(0); }); - + it("should execute a query directly", () => { // arrange const fakeUser = {