From c56828a05e53d06b3def80d78f28abf230fef145 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:01:18 +0000 Subject: [PATCH 01/42] wip --- lib/data/odata.js | 2 +- lib/model/query/submissions.js | 96 +++++++++++++++++++++++++++++++++- lib/resources/odata.js | 4 ++ test/integration/api/odata.js | 2 +- 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/lib/data/odata.js b/lib/data/odata.js index 596ccb840..b8a91c9d7 100644 --- a/lib/data/odata.js +++ b/lib/data/odata.js @@ -109,7 +109,7 @@ const navigationLink = (schemaStack, instanceId, slicer = identity) => { // returns all system properties if `options.metadata` is falsy const submissionToOData = (fields, table, submission, options = {}) => new Promise((resolve) => { const { submitter, attachment } = submission.aux; - const encHasData = (submission.aux.encryption != null) ? submission.aux.encryption.encHasData : false; + const encHasData = submission.aux.encryption?.encHasData ?? false; // we use SchemaStack to navigate the tree. const schemaStack = new SchemaStack(fields); diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 8713f5c33..219594627 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -410,7 +410,101 @@ const streamForExport = (formId, draft, keyIds, options = QueryOptions.none) => .then(stream.map(_exportUnjoiner)); const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => ({ maybeOne }) => - maybeOne(_export(formId, draft, [], options.withCondition({ 'submissions.instanceId': instanceId }))) + maybeOne( + sql` + SELECT "submissions"."id" AS "submissions!id" + , "submissions"."formId" AS "submissions!formId" + , "submissions"."instanceId" AS "submissions!instanceId" + , "submissions"."submitterId" AS "submissions!submitterId" + , "submissions"."deviceId" AS "submissions!deviceId" + , "submissions"."createdAt" AS "submissions!createdAt" + , "submissions"."updatedAt" AS "submissions!updatedAt" + , "submissions"."reviewState" AS "submissions!reviewState" + , "submissions"."draft" AS "submissions!draft" + , "submissions"."deletedAt" AS "submissions!deletedAt" + , "submission_defs"."id" AS "submission_defs!id" + , "submission_defs"."submissionId" AS "submission_defs!submissionId" + , "submission_defs"."formDefId" AS "submission_defs!formDefId" + , "submission_defs"."submitterId" AS "submission_defs!submitterId" + , "submission_defs"."localKey" AS "submission_defs!localKey" + , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" + , "submission_defs"."signature" AS "submission_defs!signature" + , "submission_defs"."createdAt" AS "submission_defs!createdAt" + , "submission_defs"."instanceName" AS "submission_defs!instanceName" + , "submission_defs"."instanceId" AS "submission_defs!instanceId" + , "submission_defs"."current" AS "submission_defs!current" + , (CASE when "submission_defs"."localKey" is null then "submission_defs"."xml" end) AS "submission_defs!xml" + , "submission_defs"."root" AS "submission_defs!root" + , "submission_defs"."deviceId" AS "submission_defs!deviceId" + , "submission_defs"."userAgent" AS "submission_defs!userAgent" + , "submission_defs"."xml" AS "submission_defs!xml" + , "encHasData" AS "encHasData" + , "blobId" AS "blobId" + , "encData" AS "encData" + , "encSha" AS "encSha" + , "encIndex" AS "encIndex" + , "encKeyId" AS "encKeyId" + , "encS3Status" AS "encS3Status" + , "actors"."id" AS "actors!id" + , "actors"."type" AS "actors!type" + , "actors"."acteeId" AS "actors!acteeId" + , "actors"."displayName" AS "actors!displayName" + , "actors"."meta" AS "actors!meta" + , "actors"."createdAt" AS "actors!createdAt" + , "actors"."updatedAt" AS "actors!updatedAt" + , "actors"."deletedAt" AS "actors!deletedAt" + , "attachments"."present" AS "attachments!present" + , "attachments"."expected" AS "attachments!expected" + , "edits"."count" AS "edits!count" + , "formVersion" AS "formVersion" + FROM submission_defs + INNER JOIN ( + SELECT * + FROM submissions + WHERE draft=${draft} + ) AS submissions ON submissions.id=submission_defs."submissionId" + LEFT OUTER JOIN actors ON submissions."submitterId"=actors.id + LEFT OUTER JOIN ( + SELECT * + , index AS "encIndex" + , (submission_attachments."blobId" is not null) AS "encHasData" + FROM submission_attachments + ) AS submission_attachments + ON submission_attachments."submissionDefId"=submission_defs.id + AND submission_attachments.name=submission_defs."encDataAttachmentName" + LEFT OUTER JOIN ( + SELECT "submissionDefId" + , COUNT("blobId")::integer AS present + , COUNT(name)::integer AS expected + FROM submission_attachments + GROUP BY "submissionDefId" + ) AS attachments ON attachments."submissionDefId"=submission_defs.id + INNER JOIN ( + SELECT "formDefId", "submissionId" + FROM submission_defs + WHERE root is true + ) AS roots ON roots."submissionId"=submission_defs."submissionId" + INNER JOIN ( + SELECT id, version AS "formVersion" + FROM form_defs + ) AS fds ON fds.id=roots."formDefId" + JOIN ( + SELECT null AS "encKeyId", null AS "encData", null AS "encSha", null AS "encS3Status" + ) AS enc ON true + INNER JOIN ( + SELECT "submissionId", (COUNT(id) - 1) AS COUNT + FROM submission_defs + GROUP BY "submissionId" + ) AS edits ON edits."submissionId"=submission_defs."submissionId" + WHERE "submissions"."instanceId"=${instanceId} + AND submission_defs.current=true + AND submissions."formId"=${formId} + AND ("submissions"."deletedAt" is null) + ORDER BY submissions."createdAt" desc + , submissions.id DESC + ` + ) + //maybeOne(_export(formId, draft, [], options.withCondition({ 'submissions.instanceId': instanceId }))) .then(map(_exportUnjoiner)); //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/resources/odata.js b/lib/resources/odata.js index b5fbb15d8..25efce6f7 100644 --- a/lib/resources/odata.js +++ b/lib/resources/odata.js @@ -48,9 +48,13 @@ module.exports = (service, endpoint) => { const singleRecord = endpoint.odata.json(async ({ Forms, Submissions, env }, { auth, params, query, originalUrl }) => { const form = await getForm(Forms, auth, params); + console.log('form:', form); const allFields = await Forms.getFields(form.def.id); + console.log('allFields:', allFields); const selectedFields = selectFields(query, getTableFromOriginalUrl(originalUrl))(allFields); + console.log('selectFields:', selectFields); const row = await Submissions.getForExport(form.id, getUuid(params.uuid), draft).then(getOrNotFound); + console.log('row:', row); return singleRowToOData(selectedFields, row, env.domain, originalUrl, query); }); diff --git a/test/integration/api/odata.js b/test/integration/api/odata.js index 0535c0923..eb22927b3 100644 --- a/test/integration/api/odata.js +++ b/test/integration/api/odata.js @@ -199,7 +199,7 @@ describe('api: /forms/:id.svc', () => { body.value[0].__system.edits.should.equal(1); }))))); - it('should return a single encrypted frame (no formdata)', testService((service) => + it.only('should return a single encrypted frame (no formdata)', testService((service) => service.login('alice', (asAlice) => asAlice.post('/v1/projects/1/forms?publish=true') .send(testData.forms.encrypted) From 08ec15cb2e22ca6aa16885f56b36b4c80c744542 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:10:32 +0000 Subject: [PATCH 02/42] remove a bunch of fields --- lib/model/query/submissions.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 219594627..f68df3381 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -413,28 +413,15 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => maybeOne( sql` SELECT "submissions"."id" AS "submissions!id" - , "submissions"."formId" AS "submissions!formId" , "submissions"."instanceId" AS "submissions!instanceId" - , "submissions"."submitterId" AS "submissions!submitterId" , "submissions"."deviceId" AS "submissions!deviceId" , "submissions"."createdAt" AS "submissions!createdAt" , "submissions"."updatedAt" AS "submissions!updatedAt" , "submissions"."reviewState" AS "submissions!reviewState" - , "submissions"."draft" AS "submissions!draft" , "submissions"."deletedAt" AS "submissions!deletedAt" - , "submission_defs"."id" AS "submission_defs!id" - , "submission_defs"."submissionId" AS "submission_defs!submissionId" - , "submission_defs"."formDefId" AS "submission_defs!formDefId" - , "submission_defs"."submitterId" AS "submission_defs!submitterId" , "submission_defs"."localKey" AS "submission_defs!localKey" , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" - , "submission_defs"."signature" AS "submission_defs!signature" - , "submission_defs"."createdAt" AS "submission_defs!createdAt" - , "submission_defs"."instanceName" AS "submission_defs!instanceName" - , "submission_defs"."instanceId" AS "submission_defs!instanceId" - , "submission_defs"."current" AS "submission_defs!current" , (CASE when "submission_defs"."localKey" is null then "submission_defs"."xml" end) AS "submission_defs!xml" - , "submission_defs"."root" AS "submission_defs!root" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" From 3900e7951527f9830031ea8676a314223a450fef Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:11:20 +0000 Subject: [PATCH 03/42] removed some more fields --- lib/model/query/submissions.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index f68df3381..2c8a822a2 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -427,11 +427,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submission_defs"."xml" AS "submission_defs!xml" , "encHasData" AS "encHasData" , "blobId" AS "blobId" - , "encData" AS "encData" - , "encSha" AS "encSha" - , "encIndex" AS "encIndex" - , "encKeyId" AS "encKeyId" - , "encS3Status" AS "encS3Status" , "actors"."id" AS "actors!id" , "actors"."type" AS "actors!type" , "actors"."acteeId" AS "actors!acteeId" From 5cbefbe4651546202e41ec713d6da2b328f9addc Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:12:12 +0000 Subject: [PATCH 04/42] removed some more fields --- lib/model/query/submissions.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 2c8a822a2..a0d754670 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -428,13 +428,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "encHasData" AS "encHasData" , "blobId" AS "blobId" , "actors"."id" AS "actors!id" - , "actors"."type" AS "actors!type" - , "actors"."acteeId" AS "actors!acteeId" , "actors"."displayName" AS "actors!displayName" - , "actors"."meta" AS "actors!meta" - , "actors"."createdAt" AS "actors!createdAt" - , "actors"."updatedAt" AS "actors!updatedAt" - , "actors"."deletedAt" AS "actors!deletedAt" , "attachments"."present" AS "attachments!present" , "attachments"."expected" AS "attachments!expected" , "edits"."count" AS "edits!count" From ae2832c42710c40e02c472132a403cf91354c18b Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:12:32 +0000 Subject: [PATCH 05/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index a0d754670..91de47837 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -426,7 +426,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" , "encHasData" AS "encHasData" - , "blobId" AS "blobId" , "actors"."id" AS "actors!id" , "actors"."displayName" AS "actors!displayName" , "attachments"."present" AS "attachments!present" From b571d0dc4c48a079bf4fb3052a9f4c6cc0c3dda5 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:15:02 +0000 Subject: [PATCH 06/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 91de47837..0a8661881 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -425,7 +425,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" - , "encHasData" AS "encHasData" + , "submission_attachments"."encHasData" AS "encHasData" , "actors"."id" AS "actors!id" , "actors"."displayName" AS "actors!displayName" , "attachments"."present" AS "attachments!present" From a8133c36ae4aa124601aaf96076537a0b06f60e5 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:15:21 +0000 Subject: [PATCH 07/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 0a8661881..9c22303d5 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -441,7 +441,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => LEFT OUTER JOIN actors ON submissions."submitterId"=actors.id LEFT OUTER JOIN ( SELECT * - , index AS "encIndex" , (submission_attachments."blobId" is not null) AS "encHasData" FROM submission_attachments ) AS submission_attachments From 48805d6dca861c31dfba38b7a8ee2dee9059f290 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:16:08 +0000 Subject: [PATCH 08/42] removed some more fields --- lib/model/query/submissions.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 9c22303d5..2f97b2e6e 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -440,8 +440,9 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => ) AS submissions ON submissions.id=submission_defs."submissionId" LEFT OUTER JOIN actors ON submissions."submitterId"=actors.id LEFT OUTER JOIN ( - SELECT * - , (submission_attachments."blobId" is not null) AS "encHasData" + SELECT "submissionDefId" + , name + , ("blobId" IS NOT NULL) AS "encHasData" FROM submission_attachments ) AS submission_attachments ON submission_attachments."submissionDefId"=submission_defs.id From 2805e355d5570cfaff104537d4f8d9e6b7b9c17b Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:18:03 +0000 Subject: [PATCH 09/42] removed some more fields --- lib/model/query/submissions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 2f97b2e6e..4762985b0 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -472,10 +472,10 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => GROUP BY "submissionId" ) AS edits ON edits."submissionId"=submission_defs."submissionId" WHERE "submissions"."instanceId"=${instanceId} - AND submission_defs.current=true + AND submission_defs.current IS TRUE AND submissions."formId"=${formId} - AND ("submissions"."deletedAt" is null) - ORDER BY submissions."createdAt" desc + AND ("submissions"."deletedAt" IS NULL) + ORDER BY submissions."createdAt" DESC , submissions.id DESC ` ) From c9f0a091bdff2e143c30fc7dec7a8be1881affb5 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:18:18 +0000 Subject: [PATCH 10/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 4762985b0..d2a56a07b 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -467,7 +467,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => SELECT null AS "encKeyId", null AS "encData", null AS "encSha", null AS "encS3Status" ) AS enc ON true INNER JOIN ( - SELECT "submissionId", (COUNT(id) - 1) AS COUNT + SELECT "submissionId", (COUNT(*) - 1) AS COUNT FROM submission_defs GROUP BY "submissionId" ) AS edits ON edits."submissionId"=submission_defs."submissionId" From f7a35078efee9700c879adbd127ab13f81463704 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:18:27 +0000 Subject: [PATCH 11/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index d2a56a07b..4762985b0 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -467,7 +467,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => SELECT null AS "encKeyId", null AS "encData", null AS "encSha", null AS "encS3Status" ) AS enc ON true INNER JOIN ( - SELECT "submissionId", (COUNT(*) - 1) AS COUNT + SELECT "submissionId", (COUNT(id) - 1) AS COUNT FROM submission_defs GROUP BY "submissionId" ) AS edits ON edits."submissionId"=submission_defs."submissionId" From 2c979dde9fa3b08e38292314af25daa20a4e3aa2 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:19:02 +0000 Subject: [PATCH 12/42] removed some more fields --- lib/model/query/submissions.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 4762985b0..8e1875f95 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -463,9 +463,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => SELECT id, version AS "formVersion" FROM form_defs ) AS fds ON fds.id=roots."formDefId" - JOIN ( - SELECT null AS "encKeyId", null AS "encData", null AS "encSha", null AS "encS3Status" - ) AS enc ON true INNER JOIN ( SELECT "submissionId", (COUNT(id) - 1) AS COUNT FROM submission_defs From 1612c065567301fe10dbe6f7e2db9ad87a5c7399 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:19:33 +0000 Subject: [PATCH 13/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 8e1875f95..6d76a6bc8 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -421,7 +421,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submissions"."deletedAt" AS "submissions!deletedAt" , "submission_defs"."localKey" AS "submission_defs!localKey" , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" - , (CASE when "submission_defs"."localKey" is null then "submission_defs"."xml" end) AS "submission_defs!xml" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" From bc96951993d9c8217dec14dfc490c356f283b605 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:22:16 +0000 Subject: [PATCH 14/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 6d76a6bc8..98239835d 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -456,7 +456,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => INNER JOIN ( SELECT "formDefId", "submissionId" FROM submission_defs - WHERE root is true + WHERE root IS TRUE ) AS roots ON roots."submissionId"=submission_defs."submissionId" INNER JOIN ( SELECT id, version AS "formVersion" From cb6e94373407afada4f3b70a9a0be9415cd3b688 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:23:05 +0000 Subject: [PATCH 15/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 98239835d..209ec844b 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -470,7 +470,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => WHERE "submissions"."instanceId"=${instanceId} AND submission_defs.current IS TRUE AND submissions."formId"=${formId} - AND ("submissions"."deletedAt" IS NULL) + AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC , submissions.id DESC ` From df67521f9299bb5d800d13381ac6f61067073773 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:23:19 +0000 Subject: [PATCH 16/42] removed some more fields --- lib/model/query/submissions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 209ec844b..464784b91 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -467,9 +467,9 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => FROM submission_defs GROUP BY "submissionId" ) AS edits ON edits."submissionId"=submission_defs."submissionId" - WHERE "submissions"."instanceId"=${instanceId} + WHERE submissions."instanceId" = ${instanceId} AND submission_defs.current IS TRUE - AND submissions."formId"=${formId} + AND submissions."formId" = ${formId} AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC , submissions.id DESC From e4bbc401e6fefdb9459f0d2310506165b527fbbd Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:25:03 +0000 Subject: [PATCH 17/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 464784b91..b8c7323ba 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -430,7 +430,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "attachments"."present" AS "attachments!present" , "attachments"."expected" AS "attachments!expected" , "edits"."count" AS "edits!count" - , "formVersion" AS "formVersion" + , "fds"."formVersion" AS "formVersion" FROM submission_defs INNER JOIN ( SELECT * From 416ed64d4722d88c2a2962558d8ab37e7fca99ea Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:28:33 +0000 Subject: [PATCH 18/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index b8c7323ba..1b0b20ec9 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -420,7 +420,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."deletedAt" AS "submissions!deletedAt" , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" From e789da0ccffd1d4be9e0a08ae6d1e4bfbe7403ee Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:32:30 +0000 Subject: [PATCH 19/42] removed some more fields --- lib/model/query/submissions.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 1b0b20ec9..3bc14e439 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -423,7 +423,7 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" - , "submission_attachments"."encHasData" AS "encHasData" + , "attachments"."present" > 0 AS "encHasData" , "actors"."id" AS "actors!id" , "actors"."displayName" AS "actors!displayName" , "attachments"."present" AS "attachments!present" @@ -439,16 +439,8 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => LEFT OUTER JOIN actors ON submissions."submitterId"=actors.id LEFT OUTER JOIN ( SELECT "submissionDefId" - , name - , ("blobId" IS NOT NULL) AS "encHasData" - FROM submission_attachments - ) AS submission_attachments - ON submission_attachments."submissionDefId"=submission_defs.id - AND submission_attachments.name=submission_defs."encDataAttachmentName" - LEFT OUTER JOIN ( - SELECT "submissionDefId" - , COUNT("blobId")::integer AS present - , COUNT(name)::integer AS expected + , COUNT("blobId")::INTEGER AS present + , COUNT(name)::INTEGER AS expected FROM submission_attachments GROUP BY "submissionDefId" ) AS attachments ON attachments."submissionDefId"=submission_defs.id From 3974e7a9f0c338a0f151e5e99f06fc0f0dbe5be3 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:36:21 +0000 Subject: [PATCH 20/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 3bc14e439..5d89fce4f 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -420,7 +420,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."deletedAt" AS "submissions!deletedAt" , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" , "attachments"."present" > 0 AS "encHasData" From ce30f40e52ef7e18ec0dc6894951f9d41bb5bff3 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:36:36 +0000 Subject: [PATCH 21/42] removed some more fields --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 5d89fce4f..0248c38f9 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -420,7 +420,6 @@ const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."deletedAt" AS "submissions!deletedAt" , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "submission_defs"."xml" AS "submission_defs!xml" , "attachments"."present" > 0 AS "encHasData" , "actors"."id" AS "actors!id" From 3a78ece7b91e60457190c82ff247084ce6265fa6 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:37:48 +0000 Subject: [PATCH 22/42] removed some more fields --- lib/model/query/submissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 0248c38f9..b1e136186 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -409,7 +409,7 @@ const streamForExport = (formId, draft, keyIds, options = QueryOptions.none) => .then(dbStream => streamEncBlobs(s3, dbStream)) .then(stream.map(_exportUnjoiner)); -const getForExport = (formId, instanceId, draft, options = QueryOptions.none) => ({ maybeOne }) => +const getForExport = (formId, instanceId, draft) => ({ maybeOne }) => maybeOne( sql` SELECT "submissions"."id" AS "submissions!id" From 3b4c83be64ad0ac84da3e39fa20e1d4c6dfc3b5b Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Mon, 7 Jul 2025 16:38:16 +0000 Subject: [PATCH 23/42] cleanup --- lib/resources/odata.js | 4 ---- test/integration/api/odata.js | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/resources/odata.js b/lib/resources/odata.js index 25efce6f7..b5fbb15d8 100644 --- a/lib/resources/odata.js +++ b/lib/resources/odata.js @@ -48,13 +48,9 @@ module.exports = (service, endpoint) => { const singleRecord = endpoint.odata.json(async ({ Forms, Submissions, env }, { auth, params, query, originalUrl }) => { const form = await getForm(Forms, auth, params); - console.log('form:', form); const allFields = await Forms.getFields(form.def.id); - console.log('allFields:', allFields); const selectedFields = selectFields(query, getTableFromOriginalUrl(originalUrl))(allFields); - console.log('selectFields:', selectFields); const row = await Submissions.getForExport(form.id, getUuid(params.uuid), draft).then(getOrNotFound); - console.log('row:', row); return singleRowToOData(selectedFields, row, env.domain, originalUrl, query); }); diff --git a/test/integration/api/odata.js b/test/integration/api/odata.js index eb22927b3..0535c0923 100644 --- a/test/integration/api/odata.js +++ b/test/integration/api/odata.js @@ -199,7 +199,7 @@ describe('api: /forms/:id.svc', () => { body.value[0].__system.edits.should.equal(1); }))))); - it.only('should return a single encrypted frame (no formdata)', testService((service) => + it('should return a single encrypted frame (no formdata)', testService((service) => service.login('alice', (asAlice) => asAlice.post('/v1/projects/1/forms?publish=true') .send(testData.forms.encrypted) From 0c22c242f526b6d808301712c41d35f230a44832 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 06:41:20 +0000 Subject: [PATCH 24/42] modification with tests passing 30602 --- lib/model/query/submissions.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index b1e136186..d1e8b717d 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -421,9 +421,9 @@ const getForExport = (formId, instanceId, draft) => ({ maybeOne }) => , "submissions"."deletedAt" AS "submissions!deletedAt" , "submission_defs"."localKey" AS "submission_defs!localKey" , "submission_defs"."xml" AS "submission_defs!xml" - , "attachments"."present" > 0 AS "encHasData" , "actors"."id" AS "actors!id" , "actors"."displayName" AS "actors!displayName" + , "attachments"."present" > 0 AS "encHasData" , "attachments"."present" AS "attachments!present" , "attachments"."expected" AS "attachments!expected" , "edits"."count" AS "edits!count" @@ -443,7 +443,8 @@ const getForExport = (formId, instanceId, draft) => ({ maybeOne }) => GROUP BY "submissionDefId" ) AS attachments ON attachments."submissionDefId"=submission_defs.id INNER JOIN ( - SELECT "formDefId", "submissionId" + SELECT "formDefId" + , "submissionId" FROM submission_defs WHERE root IS TRUE ) AS roots ON roots."submissionId"=submission_defs."submissionId" @@ -460,8 +461,6 @@ const getForExport = (formId, instanceId, draft) => ({ maybeOne }) => AND submission_defs.current IS TRUE AND submissions."formId" = ${formId} AND submissions."deletedAt" IS NULL - ORDER BY submissions."createdAt" DESC - , submissions.id DESC ` ) //maybeOne(_export(formId, draft, [], options.withCondition({ 'submissions.instanceId': instanceId }))) From 0745cae49962335d6555ba745bf60e5e3cf3c914 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 06:50:07 +0000 Subject: [PATCH 25/42] modification with tests passing 8549 --- lib/model/query/submissions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index d1e8b717d..9b93d29c8 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -437,8 +437,8 @@ const getForExport = (formId, instanceId, draft) => ({ maybeOne }) => LEFT OUTER JOIN actors ON submissions."submitterId"=actors.id LEFT OUTER JOIN ( SELECT "submissionDefId" - , COUNT("blobId")::INTEGER AS present - , COUNT(name)::INTEGER AS expected + , COUNT("blobId") AS present + , COUNT(*) AS expected FROM submission_attachments GROUP BY "submissionDefId" ) AS attachments ON attachments."submissionDefId"=submission_defs.id From 96f49671bbf2897d8a32c90f94abdb204bb80edf Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:29:45 +0000 Subject: [PATCH 26/42] modification with tests passing 19016 --- lib/model/query/submissions.js | 142 ++++++++++++++++++++++++++++++++- 1 file changed, 139 insertions(+), 3 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 9b93d29c8..0a28a9716 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -193,9 +193,145 @@ const getByIds = (projectId, xmlFormId, instanceId, draft, options = QueryOption _get(maybeOne, options.withCondition({ 'submissions.instanceId': instanceId }), projectId, xmlFormId, draft) .then(x => x.map(assignCurrentVersionSubmitter)); -const getAllForFormByIds = (projectId, xmlFormId, draft, options = QueryOptions.none) => ({ all }) => - _get(all, options, projectId, xmlFormId, draft) - .then(map(assignCurrentVersionSubmitter)); +const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ all }) => { + const auxes = rows => rows.map(row => row.aux); + const got = await _get(all, options, projectId, xmlFormId, draft); + console.log('getAllForFormByIds()', 'got:', got, auxes(got)); + const mapped = await map(assignCurrentVersionSubmitter)(got); + console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); + + if (options.extend) { + const maybeExtendedUnjoiner = options.extend ? + unjoiner(Submission, Submission.Def.into('currentVersion')) : + unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + + return all(sql` + SELECT "submissions"."id" AS "submissions!id" + , "submissions"."formId" AS "submissions!formId" + , "submissions"."instanceId" AS "submissions!instanceId" + , "submissions"."submitterId" AS "submissions!submitterId" + , "submissions"."deviceId" AS "submissions!deviceId" + , "submissions"."createdAt" AS "submissions!createdAt" + , "submissions"."updatedAt" AS "submissions!updatedAt" + , "submissions"."reviewState" AS "submissions!reviewState" + , "submissions"."userAgent" AS "submissions!userAgent" + , "submissions"."draft" AS "submissions!draft" + , "submissions"."deletedAt" AS "submissions!deletedAt" + , "submission_defs"."id" AS "submission_defs!id" + , "submission_defs"."submissionId" AS "submission_defs!submissionId" + , "submission_defs"."formDefId" AS "submission_defs!formDefId" + , "submission_defs"."submitterId" AS "submission_defs!submitterId" + , "submission_defs"."localKey" AS "submission_defs!localKey" + , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" + , "submission_defs"."signature" AS "submission_defs!signature" + , "submission_defs"."createdAt" AS "submission_defs!createdAt" + , "submission_defs"."instanceName" AS "submission_defs!instanceName" + , "submission_defs"."instanceId" AS "submission_defs!instanceId" + , "submission_defs"."current" AS "submission_defs!current" + , "submission_defs"."xml" AS "submission_defs!xml" + , "submission_defs"."root" AS "submission_defs!root" + , "submission_defs"."deviceId" AS "submission_defs!deviceId" + , "submission_defs"."userAgent" AS "submission_defs!userAgent" + , "actors"."id" AS "actors!id" + , "actors"."type" AS "actors!type" + , "actors"."acteeId" AS "actors!acteeId" + , "actors"."displayName" AS "actors!displayName" + , "actors"."meta" AS "actors!meta" + , "actors"."createdAt" AS "actors!createdAt" + , "actors"."updatedAt" AS "actors!updatedAt" + , "actors"."deletedAt" AS "actors!deletedAt" + , "current_version_actors"."id" AS "current_version_actors!id" + , "current_version_actors"."type" AS "current_version_actors!type" + , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" + , "current_version_actors"."displayName" AS "current_version_actors!displayName" + , "current_version_actors"."meta" AS "current_version_actors!meta" + , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" + , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" + , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" + FROM ( + SELECT submissions.*, submission_defs."userAgent" + FROM submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root + ) AS submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" + JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" + LEFT OUTER JOIN actors on actors.id=submissions."submitterId" + LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" + WHERE draft=${draft} + AND submissions."deletedAt" IS NULL + ORDER BY submissions."createdAt" DESC + , submissions.id DESC + `) + .then(map(maybeExtendedUnjoiner)) + .then(map(assignCurrentVersionSubmitter)); + } else { + const maybeExtendedUnjoiner = options.extend ? + unjoiner(Submission, Submission.Def.into('currentVersion')) : + unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + + return all(sql` + SELECT "submissions"."id" AS "submissions!id" + , "submissions"."formId" AS "submissions!formId" + , "submissions"."instanceId" AS "submissions!instanceId" + , "submissions"."submitterId" AS "submissions!submitterId" + , "submissions"."deviceId" AS "submissions!deviceId" + , "submissions"."createdAt" AS "submissions!createdAt" + , "submissions"."updatedAt" AS "submissions!updatedAt" + , "submissions"."reviewState" AS "submissions!reviewState" + , "submissions"."userAgent" AS "submissions!userAgent" + , "submissions"."draft" AS "submissions!draft" + , "submissions"."deletedAt" AS "submissions!deletedAt" + , "submission_defs"."id" AS "submission_defs!id" + , "submission_defs"."submissionId" AS "submission_defs!submissionId" + , "submission_defs"."formDefId" AS "submission_defs!formDefId" + , "submission_defs"."submitterId" AS "submission_defs!submitterId" + , "submission_defs"."localKey" AS "submission_defs!localKey" + , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" + , "submission_defs"."signature" AS "submission_defs!signature" + , "submission_defs"."createdAt" AS "submission_defs!createdAt" + , "submission_defs"."instanceName" AS "submission_defs!instanceName" + , "submission_defs"."instanceId" AS "submission_defs!instanceId" + , "submission_defs"."current" AS "submission_defs!current" + , "submission_defs"."xml" AS "submission_defs!xml" + , "submission_defs"."root" AS "submission_defs!root" + , "submission_defs"."deviceId" AS "submission_defs!deviceId" + , "submission_defs"."userAgent" AS "submission_defs!userAgent" + , "actors"."id" AS "actors!id" + , "actors"."type" AS "actors!type" + , "actors"."acteeId" AS "actors!acteeId" + , "actors"."displayName" AS "actors!displayName" + , "actors"."meta" AS "actors!meta" + , "actors"."createdAt" AS "actors!createdAt" + , "actors"."updatedAt" AS "actors!updatedAt" + , "actors"."deletedAt" AS "actors!deletedAt" + , "current_version_actors"."id" AS "current_version_actors!id" + , "current_version_actors"."type" AS "current_version_actors!type" + , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" + , "current_version_actors"."displayName" AS "current_version_actors!displayName" + , "current_version_actors"."meta" AS "current_version_actors!meta" + , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" + , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" + , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" + FROM ( + SELECT submissions.*, submission_defs."userAgent" + FROM submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root + ) AS submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" + JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" + LEFT OUTER JOIN actors on actors.id=submissions."submitterId" + LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" + WHERE draft=${draft} + AND submissions."deletedAt" IS NULL + ORDER BY submissions."createdAt" DESC + , submissions.id DESC + `) + .then(map(maybeExtendedUnjoiner)) + .then(map(assignCurrentVersionSubmitter)); + } +}; const getById = (submissionId) => ({ maybeOne }) => maybeOne(sql`select * from submissions where id=${submissionId} and "deletedAt" is null`) From bebe73845e48c11fafd72c7c2987a30e39fafa96 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:32:45 +0000 Subject: [PATCH 27/42] modification with tests passing 22369 --- lib/model/query/submissions.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 0a28a9716..c4958f2db 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -201,9 +201,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); if (options.extend) { - const maybeExtendedUnjoiner = options.extend ? - unjoiner(Submission, Submission.Def.into('currentVersion')) : - unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; return all(sql` SELECT "submissions"."id" AS "submissions!id" From 11b84005ab84b0be3b15f5938f0b2e634ffd42e4 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:35:05 +0000 Subject: [PATCH 28/42] modification with tests passing 25732 --- lib/model/query/submissions.js | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index c4958f2db..471dc0691 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -200,7 +200,10 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al const mapped = await map(assignCurrentVersionSubmitter)(got); console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); - if (options.extend) { + console.log('options:', options); + console.log('options.extend:', options.extend); + + if (options.extended) { const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; return all(sql` @@ -264,9 +267,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al .then(map(maybeExtendedUnjoiner)) .then(map(assignCurrentVersionSubmitter)); } else { - const maybeExtendedUnjoiner = options.extend ? - unjoiner(Submission, Submission.Def.into('currentVersion')) : - unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion')); return all(sql` SELECT "submissions"."id" AS "submissions!id" @@ -295,22 +296,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submission_defs"."root" AS "submission_defs!root" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" - , "actors"."id" AS "actors!id" - , "actors"."type" AS "actors!type" - , "actors"."acteeId" AS "actors!acteeId" - , "actors"."displayName" AS "actors!displayName" - , "actors"."meta" AS "actors!meta" - , "actors"."createdAt" AS "actors!createdAt" - , "actors"."updatedAt" AS "actors!updatedAt" - , "actors"."deletedAt" AS "actors!deletedAt" - , "current_version_actors"."id" AS "current_version_actors!id" - , "current_version_actors"."type" AS "current_version_actors!type" - , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" - , "current_version_actors"."displayName" AS "current_version_actors!displayName" - , "current_version_actors"."meta" AS "current_version_actors!meta" - , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" - , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" - , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" FROM ( SELECT submissions.*, submission_defs."userAgent" FROM submissions @@ -319,8 +304,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" - LEFT OUTER JOIN actors on actors.id=submissions."submitterId" - LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" WHERE draft=${draft} AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC From 5ee1348fc20008be7b6829a3032d540d639c10ed Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:37:30 +0000 Subject: [PATCH 29/42] modification with tests passing 64 --- lib/model/query/submissions.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 471dc0691..cd961dcde 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -309,8 +309,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al ORDER BY submissions."createdAt" DESC , submissions.id DESC `) - .then(map(maybeExtendedUnjoiner)) - .then(map(assignCurrentVersionSubmitter)); + .then(map(maybeExtendedUnjoiner)); } }; From 6785739ba9751a2810b52440f929d7bd1e5e8547 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:43:39 +0000 Subject: [PATCH 30/42] modification with tests passing 7033 --- lib/model/query/submissions.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index cd961dcde..65c612858 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -270,24 +270,18 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion')); return all(sql` - SELECT "submissions"."id" AS "submissions!id" - , "submissions"."formId" AS "submissions!formId" - , "submissions"."instanceId" AS "submissions!instanceId" + SELECT "submissions"."instanceId" AS "submissions!instanceId" , "submissions"."submitterId" AS "submissions!submitterId" , "submissions"."deviceId" AS "submissions!deviceId" , "submissions"."createdAt" AS "submissions!createdAt" , "submissions"."updatedAt" AS "submissions!updatedAt" , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."userAgent" AS "submissions!userAgent" - , "submissions"."draft" AS "submissions!draft" - , "submissions"."deletedAt" AS "submissions!deletedAt" + , NULL AS "submissions!deletedAt" , "submission_defs"."id" AS "submission_defs!id" , "submission_defs"."submissionId" AS "submission_defs!submissionId" , "submission_defs"."formDefId" AS "submission_defs!formDefId" , "submission_defs"."submitterId" AS "submission_defs!submitterId" - , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" - , "submission_defs"."signature" AS "submission_defs!signature" , "submission_defs"."createdAt" AS "submission_defs!createdAt" , "submission_defs"."instanceName" AS "submission_defs!instanceName" , "submission_defs"."instanceId" AS "submission_defs!instanceId" From 7bfa238629084895acecdd8062c43379771db9b0 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:45:31 +0000 Subject: [PATCH 31/42] modification with tests passing 11891 --- lib/model/query/submissions.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 65c612858..a6fe59560 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -278,16 +278,12 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."userAgent" AS "submissions!userAgent" , NULL AS "submissions!deletedAt" - , "submission_defs"."id" AS "submission_defs!id" , "submission_defs"."submissionId" AS "submission_defs!submissionId" - , "submission_defs"."formDefId" AS "submission_defs!formDefId" , "submission_defs"."submitterId" AS "submission_defs!submitterId" , "submission_defs"."createdAt" AS "submission_defs!createdAt" , "submission_defs"."instanceName" AS "submission_defs!instanceName" , "submission_defs"."instanceId" AS "submission_defs!instanceId" - , "submission_defs"."current" AS "submission_defs!current" - , "submission_defs"."xml" AS "submission_defs!xml" - , "submission_defs"."root" AS "submission_defs!root" + , TRUE AS "submission_defs!current" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" FROM ( From 988efe24234687b404ff664e2dbed93b9b44b590 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:46:31 +0000 Subject: [PATCH 32/42] modification with tests passing 21702 --- lib/model/query/submissions.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index a6fe59560..947643182 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -292,8 +292,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" - JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" WHERE draft=${draft} AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC From 7efbb5df8f5b23bcebcd1da077b30eb0f9e78c9e Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:48:37 +0000 Subject: [PATCH 33/42] modification with tests passing 6506 --- lib/model/query/submissions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 947643182..19466e579 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -278,7 +278,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."userAgent" AS "submissions!userAgent" , NULL AS "submissions!deletedAt" - , "submission_defs"."submissionId" AS "submission_defs!submissionId" , "submission_defs"."submitterId" AS "submission_defs!submitterId" , "submission_defs"."createdAt" AS "submission_defs!createdAt" , "submission_defs"."instanceName" AS "submission_defs!instanceName" From 8fe780484101f5ce7c6007e24f782ba6a8b2054b Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:49:44 +0000 Subject: [PATCH 34/42] modification with tests passing 19748 --- lib/model/query/submissions.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 19466e579..6fcd8f867 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -207,9 +207,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; return all(sql` - SELECT "submissions"."id" AS "submissions!id" - , "submissions"."formId" AS "submissions!formId" - , "submissions"."instanceId" AS "submissions!instanceId" + SELECT "submissions"."instanceId" AS "submissions!instanceId" , "submissions"."submitterId" AS "submissions!submitterId" , "submissions"."deviceId" AS "submissions!deviceId" , "submissions"."createdAt" AS "submissions!createdAt" @@ -218,8 +216,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submissions"."userAgent" AS "submissions!userAgent" , "submissions"."draft" AS "submissions!draft" , "submissions"."deletedAt" AS "submissions!deletedAt" - , "submission_defs"."id" AS "submission_defs!id" - , "submission_defs"."submissionId" AS "submission_defs!submissionId" , "submission_defs"."formDefId" AS "submission_defs!formDefId" , "submission_defs"."submitterId" AS "submission_defs!submitterId" , "submission_defs"."localKey" AS "submission_defs!localKey" @@ -228,9 +224,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submission_defs"."createdAt" AS "submission_defs!createdAt" , "submission_defs"."instanceName" AS "submission_defs!instanceName" , "submission_defs"."instanceId" AS "submission_defs!instanceId" - , "submission_defs"."current" AS "submission_defs!current" - , "submission_defs"."xml" AS "submission_defs!xml" - , "submission_defs"."root" AS "submission_defs!root" + , TRUE AS "submission_defs!current" , "submission_defs"."deviceId" AS "submission_defs!deviceId" , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "actors"."id" AS "actors!id" @@ -255,8 +249,6 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" - JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" LEFT OUTER JOIN actors on actors.id=submissions."submitterId" LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" WHERE draft=${draft} From 0385e2ea6b8d37e933989f8fc211aca3a8100b33 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:53:49 +0000 Subject: [PATCH 35/42] whitespace --- lib/model/query/submissions.js | 176 ++++++++++++++++----------------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 6fcd8f867..2d9326f9c 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -200,95 +200,95 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al const mapped = await map(assignCurrentVersionSubmitter)(got); console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); - console.log('options:', options); - console.log('options.extend:', options.extend); - - if (options.extended) { - const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; - - return all(sql` - SELECT "submissions"."instanceId" AS "submissions!instanceId" - , "submissions"."submitterId" AS "submissions!submitterId" - , "submissions"."deviceId" AS "submissions!deviceId" - , "submissions"."createdAt" AS "submissions!createdAt" - , "submissions"."updatedAt" AS "submissions!updatedAt" - , "submissions"."reviewState" AS "submissions!reviewState" - , "submissions"."userAgent" AS "submissions!userAgent" - , "submissions"."draft" AS "submissions!draft" - , "submissions"."deletedAt" AS "submissions!deletedAt" - , "submission_defs"."formDefId" AS "submission_defs!formDefId" - , "submission_defs"."submitterId" AS "submission_defs!submitterId" - , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" - , "submission_defs"."signature" AS "submission_defs!signature" - , "submission_defs"."createdAt" AS "submission_defs!createdAt" - , "submission_defs"."instanceName" AS "submission_defs!instanceName" - , "submission_defs"."instanceId" AS "submission_defs!instanceId" - , TRUE AS "submission_defs!current" - , "submission_defs"."deviceId" AS "submission_defs!deviceId" - , "submission_defs"."userAgent" AS "submission_defs!userAgent" - , "actors"."id" AS "actors!id" - , "actors"."type" AS "actors!type" - , "actors"."acteeId" AS "actors!acteeId" - , "actors"."displayName" AS "actors!displayName" - , "actors"."meta" AS "actors!meta" - , "actors"."createdAt" AS "actors!createdAt" - , "actors"."updatedAt" AS "actors!updatedAt" - , "actors"."deletedAt" AS "actors!deletedAt" - , "current_version_actors"."id" AS "current_version_actors!id" - , "current_version_actors"."type" AS "current_version_actors!type" - , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" - , "current_version_actors"."displayName" AS "current_version_actors!displayName" - , "current_version_actors"."meta" AS "current_version_actors!meta" - , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" - , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" - , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" - FROM ( - SELECT submissions.*, submission_defs."userAgent" - FROM submissions - JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root - ) AS submissions - JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - LEFT OUTER JOIN actors on actors.id=submissions."submitterId" - LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" - WHERE draft=${draft} - AND submissions."deletedAt" IS NULL - ORDER BY submissions."createdAt" DESC - , submissions.id DESC - `) - .then(map(maybeExtendedUnjoiner)) - .then(map(assignCurrentVersionSubmitter)); + console.log('options:', options); + console.log('options.extend:', options.extend); + + if (options.extended) { + const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + + return all(sql` + SELECT "submissions"."instanceId" AS "submissions!instanceId" + , "submissions"."submitterId" AS "submissions!submitterId" + , "submissions"."deviceId" AS "submissions!deviceId" + , "submissions"."createdAt" AS "submissions!createdAt" + , "submissions"."updatedAt" AS "submissions!updatedAt" + , "submissions"."reviewState" AS "submissions!reviewState" + , "submissions"."userAgent" AS "submissions!userAgent" + , "submissions"."draft" AS "submissions!draft" + , "submissions"."deletedAt" AS "submissions!deletedAt" + , "submission_defs"."formDefId" AS "submission_defs!formDefId" + , "submission_defs"."submitterId" AS "submission_defs!submitterId" + , "submission_defs"."localKey" AS "submission_defs!localKey" + , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" + , "submission_defs"."signature" AS "submission_defs!signature" + , "submission_defs"."createdAt" AS "submission_defs!createdAt" + , "submission_defs"."instanceName" AS "submission_defs!instanceName" + , "submission_defs"."instanceId" AS "submission_defs!instanceId" + , TRUE AS "submission_defs!current" + , "submission_defs"."deviceId" AS "submission_defs!deviceId" + , "submission_defs"."userAgent" AS "submission_defs!userAgent" + , "actors"."id" AS "actors!id" + , "actors"."type" AS "actors!type" + , "actors"."acteeId" AS "actors!acteeId" + , "actors"."displayName" AS "actors!displayName" + , "actors"."meta" AS "actors!meta" + , "actors"."createdAt" AS "actors!createdAt" + , "actors"."updatedAt" AS "actors!updatedAt" + , "actors"."deletedAt" AS "actors!deletedAt" + , "current_version_actors"."id" AS "current_version_actors!id" + , "current_version_actors"."type" AS "current_version_actors!type" + , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" + , "current_version_actors"."displayName" AS "current_version_actors!displayName" + , "current_version_actors"."meta" AS "current_version_actors!meta" + , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" + , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" + , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" + FROM ( + SELECT submissions.*, submission_defs."userAgent" + FROM submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root + ) AS submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + LEFT OUTER JOIN actors on actors.id=submissions."submitterId" + LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" + WHERE draft=${draft} + AND submissions."deletedAt" IS NULL + ORDER BY submissions."createdAt" DESC + , submissions.id DESC + `) + .then(map(maybeExtendedUnjoiner)) + .then(map(assignCurrentVersionSubmitter)); } else { - const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion')); - - return all(sql` - SELECT "submissions"."instanceId" AS "submissions!instanceId" - , "submissions"."submitterId" AS "submissions!submitterId" - , "submissions"."deviceId" AS "submissions!deviceId" - , "submissions"."createdAt" AS "submissions!createdAt" - , "submissions"."updatedAt" AS "submissions!updatedAt" - , "submissions"."reviewState" AS "submissions!reviewState" - , "submissions"."userAgent" AS "submissions!userAgent" - , NULL AS "submissions!deletedAt" - , "submission_defs"."submitterId" AS "submission_defs!submitterId" - , "submission_defs"."createdAt" AS "submission_defs!createdAt" - , "submission_defs"."instanceName" AS "submission_defs!instanceName" - , "submission_defs"."instanceId" AS "submission_defs!instanceId" - , TRUE AS "submission_defs!current" - , "submission_defs"."deviceId" AS "submission_defs!deviceId" - , "submission_defs"."userAgent" AS "submission_defs!userAgent" - FROM ( - SELECT submissions.*, submission_defs."userAgent" - FROM submissions - JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root - ) AS submissions - JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - WHERE draft=${draft} - AND submissions."deletedAt" IS NULL - ORDER BY submissions."createdAt" DESC - , submissions.id DESC - `) - .then(map(maybeExtendedUnjoiner)); + const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion')); + + return all(sql` + SELECT "submissions"."instanceId" AS "submissions!instanceId" + , "submissions"."submitterId" AS "submissions!submitterId" + , "submissions"."deviceId" AS "submissions!deviceId" + , "submissions"."createdAt" AS "submissions!createdAt" + , "submissions"."updatedAt" AS "submissions!updatedAt" + , "submissions"."reviewState" AS "submissions!reviewState" + , "submissions"."userAgent" AS "submissions!userAgent" + , NULL AS "submissions!deletedAt" + , "submission_defs"."submitterId" AS "submission_defs!submitterId" + , "submission_defs"."createdAt" AS "submission_defs!createdAt" + , "submission_defs"."instanceName" AS "submission_defs!instanceName" + , "submission_defs"."instanceId" AS "submission_defs!instanceId" + , TRUE AS "submission_defs!current" + , "submission_defs"."deviceId" AS "submission_defs!deviceId" + , "submission_defs"."userAgent" AS "submission_defs!userAgent" + FROM ( + SELECT submissions.*, submission_defs."userAgent" + FROM submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root + ) AS submissions + JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + WHERE draft=${draft} + AND submissions."deletedAt" IS NULL + ORDER BY submissions."createdAt" DESC + , submissions.id DESC + `) + .then(map(maybeExtendedUnjoiner)); } }; From b6e43ef429519f91d4dc140bf553f6e901be1d6d Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 08:54:36 +0000 Subject: [PATCH 36/42] lint --- lib/model/query/submissions.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 2d9326f9c..03f8caf07 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -196,15 +196,15 @@ const getByIds = (projectId, xmlFormId, instanceId, draft, options = QueryOption const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ all }) => { const auxes = rows => rows.map(row => row.aux); const got = await _get(all, options, projectId, xmlFormId, draft); - console.log('getAllForFormByIds()', 'got:', got, auxes(got)); + console.log('getAllForFormByIds()', 'got:', got, auxes(got)); // eslint-disable-line no-console const mapped = await map(assignCurrentVersionSubmitter)(got); - console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); + console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); // eslint-disable-line no-console - console.log('options:', options); - console.log('options.extend:', options.extend); + console.log('options:', options); // eslint-disable-line no-console + console.log('options.extend:', options.extend); // eslint-disable-line no-console if (options.extended) { - const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')) ; + const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')); return all(sql` SELECT "submissions"."instanceId" AS "submissions!instanceId" From 014b3e5118cfdba94e2db57437e8798946e7190e Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 09:05:15 +0000 Subject: [PATCH 37/42] modification with tests passing 11085 --- lib/model/query/submissions.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 03f8caf07..036819532 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -197,16 +197,18 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al const auxes = rows => rows.map(row => row.aux); const got = await _get(all, options, projectId, xmlFormId, draft); console.log('getAllForFormByIds()', 'got:', got, auxes(got)); // eslint-disable-line no-console - const mapped = await map(assignCurrentVersionSubmitter)(got); - console.log('getAllForFormByIds()', 'mapped:', mapped, auxes(mapped)); // eslint-disable-line no-console + const oldRes = await map(assignCurrentVersionSubmitter)(got); + console.log('getAllForFormByIds()', 'oldRes:', oldRes, auxes(oldRes)); // eslint-disable-line no-console console.log('options:', options); // eslint-disable-line no-console console.log('options.extend:', options.extend); // eslint-disable-line no-console + let newRes; + if (options.extended) { const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter')); - return all(sql` + newRes = await all(sql` SELECT "submissions"."instanceId" AS "submissions!instanceId" , "submissions"."submitterId" AS "submissions!submitterId" , "submissions"."deviceId" AS "submissions!deviceId" @@ -215,12 +217,9 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submissions"."reviewState" AS "submissions!reviewState" , "submissions"."userAgent" AS "submissions!userAgent" , "submissions"."draft" AS "submissions!draft" - , "submissions"."deletedAt" AS "submissions!deletedAt" + , NULL AS "submissions!deletedAt" , "submission_defs"."formDefId" AS "submission_defs!formDefId" , "submission_defs"."submitterId" AS "submission_defs!submitterId" - , "submission_defs"."localKey" AS "submission_defs!localKey" - , "submission_defs"."encDataAttachmentName" AS "submission_defs!encDataAttachmentName" - , "submission_defs"."signature" AS "submission_defs!signature" , "submission_defs"."createdAt" AS "submission_defs!createdAt" , "submission_defs"."instanceName" AS "submission_defs!instanceName" , "submission_defs"."instanceId" AS "submission_defs!instanceId" @@ -229,26 +228,22 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al , "submission_defs"."userAgent" AS "submission_defs!userAgent" , "actors"."id" AS "actors!id" , "actors"."type" AS "actors!type" - , "actors"."acteeId" AS "actors!acteeId" , "actors"."displayName" AS "actors!displayName" - , "actors"."meta" AS "actors!meta" , "actors"."createdAt" AS "actors!createdAt" , "actors"."updatedAt" AS "actors!updatedAt" - , "actors"."deletedAt" AS "actors!deletedAt" , "current_version_actors"."id" AS "current_version_actors!id" , "current_version_actors"."type" AS "current_version_actors!type" - , "current_version_actors"."acteeId" AS "current_version_actors!acteeId" , "current_version_actors"."displayName" AS "current_version_actors!displayName" - , "current_version_actors"."meta" AS "current_version_actors!meta" , "current_version_actors"."createdAt" AS "current_version_actors!createdAt" , "current_version_actors"."updatedAt" AS "current_version_actors!updatedAt" - , "current_version_actors"."deletedAt" AS "current_version_actors!deletedAt" FROM ( SELECT submissions.*, submission_defs."userAgent" FROM submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" + JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" LEFT OUTER JOIN actors on actors.id=submissions."submitterId" LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" WHERE draft=${draft} @@ -261,7 +256,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al } else { const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion')); - return all(sql` + newRes = await all(sql` SELECT "submissions"."instanceId" AS "submissions!instanceId" , "submissions"."submitterId" AS "submissions!submitterId" , "submissions"."deviceId" AS "submissions!deviceId" @@ -283,6 +278,8 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current + JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" + JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" WHERE draft=${draft} AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC @@ -290,6 +287,8 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al `) .then(map(maybeExtendedUnjoiner)); } + + return newRes; }; const getById = (submissionId) => ({ maybeOne }) => From 26c682f8fbc7f7b7f38bcbe5a41b342d7dd7991a Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 09:16:35 +0000 Subject: [PATCH 38/42] modification with tests passing 31654 --- lib/model/query/submissions.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 036819532..308c2916b 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -242,8 +242,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" - JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" + JOIN forms ON forms."projectId"=${projectId} AND forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" LEFT OUTER JOIN actors on actors.id=submissions."submitterId" LEFT OUTER JOIN actors current_version_actors on current_version_actors.id=submission_defs."submitterId" WHERE draft=${draft} @@ -278,8 +277,7 @@ const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ al JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND root ) AS submissions JOIN submission_defs ON submissions.id = submission_defs."submissionId" AND submission_defs.current - JOIN forms ON forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" - JOIN projects ON projects.id=${projectId} AND projects.id=forms."projectId" + JOIN forms ON forms."projectId"=${projectId} AND forms."xmlFormId"=${xmlFormId} AND forms.id=submissions."formId" WHERE draft=${draft} AND submissions."deletedAt" IS NULL ORDER BY submissions."createdAt" DESC From a1e54ad9e573e1a462af9b6219b1b1692d1830c0 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Tue, 8 Jul 2025 09:27:30 +0000 Subject: [PATCH 39/42] one less join? --- lib/model/query/submissions.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index 308c2916b..da878bd26 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -179,8 +179,7 @@ const _get = extender(Submission, Submission.Def.into('currentVersion'))(Actor.i join submission_defs on submissions.id = submission_defs."submissionId" and root ) submissions join submission_defs on submissions.id = submission_defs."submissionId" and submission_defs.current - join forms on forms."xmlFormId"=${xmlFormId} and forms.id=submissions."formId" - join projects on projects.id=${projectId} and projects.id=forms."projectId" + join forms on forms."xmlFormId"=${xmlFormId} and forms.id=submissions."formId" and forms."projectId"=${projectId} ${extend|| sql` left outer join actors on actors.id=submissions."submitterId" left outer join actors current_version_actors on current_version_actors.id=submission_defs."submitterId" From 08b47f9f0193e466eb225c8c9bbcce3345d36ec7 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Wed, 9 Jul 2025 11:41:23 +0000 Subject: [PATCH 40/42] revert irrelevant change --- lib/data/odata.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/data/odata.js b/lib/data/odata.js index b8a91c9d7..596ccb840 100644 --- a/lib/data/odata.js +++ b/lib/data/odata.js @@ -109,7 +109,7 @@ const navigationLink = (schemaStack, instanceId, slicer = identity) => { // returns all system properties if `options.metadata` is falsy const submissionToOData = (fields, table, submission, options = {}) => new Promise((resolve) => { const { submitter, attachment } = submission.aux; - const encHasData = submission.aux.encryption?.encHasData ?? false; + const encHasData = (submission.aux.encryption != null) ? submission.aux.encryption.encHasData : false; // we use SchemaStack to navigate the tree. const schemaStack = new SchemaStack(fields); From cc1387ff81150934f6f1ed187cc91dddda2c426a Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Wed, 9 Jul 2025 11:41:50 +0000 Subject: [PATCH 41/42] remove logging --- lib/model/query/submissions.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index da878bd26..efebf9565 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -195,12 +195,7 @@ const getByIds = (projectId, xmlFormId, instanceId, draft, options = QueryOption const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ all }) => { const auxes = rows => rows.map(row => row.aux); const got = await _get(all, options, projectId, xmlFormId, draft); - console.log('getAllForFormByIds()', 'got:', got, auxes(got)); // eslint-disable-line no-console const oldRes = await map(assignCurrentVersionSubmitter)(got); - console.log('getAllForFormByIds()', 'oldRes:', oldRes, auxes(oldRes)); // eslint-disable-line no-console - - console.log('options:', options); // eslint-disable-line no-console - console.log('options.extend:', options.extend); // eslint-disable-line no-console let newRes; From c4d3ef99abb7cfce04753062849af29856359af7 Mon Sep 17 00:00:00 2001 From: alxndrsn Date: Wed, 9 Jul 2025 11:44:14 +0000 Subject: [PATCH 42/42] cleanup --- lib/model/query/submissions.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/model/query/submissions.js b/lib/model/query/submissions.js index efebf9565..ce11504a3 100644 --- a/lib/model/query/submissions.js +++ b/lib/model/query/submissions.js @@ -193,12 +193,7 @@ const getByIds = (projectId, xmlFormId, instanceId, draft, options = QueryOption .then(x => x.map(assignCurrentVersionSubmitter)); const getAllForFormByIds = (projectId, xmlFormId, draft, options) => async ({ all }) => { - const auxes = rows => rows.map(row => row.aux); - const got = await _get(all, options, projectId, xmlFormId, draft); - const oldRes = await map(assignCurrentVersionSubmitter)(got); - let newRes; - if (options.extended) { const maybeExtendedUnjoiner = unjoiner(Submission, Submission.Def.into('currentVersion'), Actor.into('submitter'), Actor.alias('current_version_actors', 'currentVersionSubmitter'));