@budibase/server 1.0.49-alpha.1 → 1.0.49-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.ba78c49d.css → index.83c0944f.css} +1 -1
- package/builder/assets/{index.ed1cf508.js → index.f686d3cd.js} +184 -184
- package/builder/index.html +2 -2
- package/coverage/clover.xml +2656 -2712
- package/coverage/coverage-final.json +104 -105
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +157 -136
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +10 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +69 -54
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +28 -28
- package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
- package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -105
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +25 -31
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +21 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +27 -57
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +37 -37
- package/coverage/lcov-report/api/controllers/table/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/table/internal.js.html +45 -54
- package/coverage/lcov-report/api/controllers/table/utils.js.html +67 -103
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +43 -52
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +22 -7
- package/coverage/lcov-report/api/routes/index.js.html +10 -4
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +26 -26
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +40 -82
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +74 -74
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +5 -5
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +97 -112
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +21 -15
- package/coverage/lcov-report/middleware/builder.js.html +3 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
- package/coverage/lcov-report/middleware/index.html +28 -28
- package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +25 -25
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +26 -47
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +57 -48
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +42 -72
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
- package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +32 -74
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
- package/coverage/lcov.info +4018 -4092
- package/dist/api/controllers/application.js +49 -48
- package/dist/api/controllers/auth.js +4 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +9 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +29 -44
- package/dist/api/controllers/row/internalSearch.js +11 -13
- package/dist/api/controllers/row/staticFormula.js +11 -11
- package/dist/api/controllers/row/utils.js +7 -6
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +4 -4
- package/dist/api/controllers/table/bulkFormula.js +14 -15
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +5 -5
- package/dist/api/controllers/table/internal.js +16 -19
- package/dist/api/controllers/table/utils.js +29 -31
- package/dist/api/controllers/user.js +16 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +1 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -26
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/environment.js +3 -1
- package/dist/integrations/base/sql.js +49 -15
- package/dist/integrations/utils.js +3 -0
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +2 -4
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +70 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +13 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +9 -10
- package/dist/utilities/usageQuota/index.js +1 -0
- package/dist/utilities/usageQuota/rows.js +1 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -4
- package/package.json +5 -5
- package/scripts/integrations/mssql/data/Dockerfile +1 -1
- package/scripts/integrations/mssql/data/setup.sql +17 -4
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +38 -31
- package/src/api/controllers/auth.js +4 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +9 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +29 -44
- package/src/api/controllers/row/internalSearch.js +11 -13
- package/src/api/controllers/row/staticFormula.js +10 -11
- package/src/api/controllers/row/utils.js +7 -6
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +4 -4
- package/src/api/controllers/table/bulkFormula.js +13 -23
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +5 -5
- package/src/api/controllers/table/internal.js +18 -21
- package/src/api/controllers/table/utils.js +29 -41
- package/src/api/controllers/user.js +17 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -0
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +0 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -30
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/environment.js +3 -1
- package/src/integrations/base/sql.ts +61 -22
- package/src/integrations/utils.ts +4 -1
- package/src/middleware/authorized.js +5 -3
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +7 -2
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/usageQuota.js +2 -4
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +73 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +14 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +9 -23
- package/src/utilities/usageQuota/index.js +1 -0
- package/src/utilities/usageQuota/rows.js +1 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -4
- package/tsconfig.json +2 -1
- package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
- package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
- package/src/migrations/usageQuotas/index.js +0 -24
- package/src/migrations/usageQuotas/syncRows.js +0 -21
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../../../db")
|
|
2
1
|
const linkRows = require("../../../db/linkedRows")
|
|
3
2
|
const {
|
|
4
3
|
generateRowID,
|
|
@@ -25,6 +24,7 @@ const {
|
|
|
25
24
|
getFromMemoryDoc,
|
|
26
25
|
} = require("../view/utils")
|
|
27
26
|
const { cloneDeep } = require("lodash/fp")
|
|
27
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
28
28
|
const { finaliseRow, updateRelatedFormula } = require("./staticFormula")
|
|
29
29
|
|
|
30
30
|
const CALCULATION_TYPES = {
|
|
@@ -76,8 +76,7 @@ async function getRawTableData(ctx, db, tableId) {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
exports.patch = async ctx => {
|
|
79
|
-
const
|
|
80
|
-
const db = new CouchDB(appId)
|
|
79
|
+
const db = getAppDB()
|
|
81
80
|
const inputs = ctx.request.body
|
|
82
81
|
const tableId = inputs.tableId
|
|
83
82
|
const isUserTable = tableId === InternalTables.USER_METADATA
|
|
@@ -116,14 +115,13 @@ exports.patch = async ctx => {
|
|
|
116
115
|
|
|
117
116
|
// returned row is cleaned and prepared for writing to DB
|
|
118
117
|
row = await linkRows.updateLinks({
|
|
119
|
-
appId,
|
|
120
118
|
eventType: linkRows.EventType.ROW_UPDATE,
|
|
121
119
|
row,
|
|
122
120
|
tableId: row.tableId,
|
|
123
121
|
table,
|
|
124
122
|
})
|
|
125
123
|
// check if any attachments removed
|
|
126
|
-
await cleanupAttachments(
|
|
124
|
+
await cleanupAttachments(table, { oldRow, row })
|
|
127
125
|
|
|
128
126
|
if (isUserTable) {
|
|
129
127
|
// the row has been updated, need to put it into the ctx
|
|
@@ -132,15 +130,14 @@ exports.patch = async ctx => {
|
|
|
132
130
|
return { row: ctx.body, table }
|
|
133
131
|
}
|
|
134
132
|
|
|
135
|
-
return finaliseRow(
|
|
133
|
+
return finaliseRow(table, row, {
|
|
136
134
|
oldTable: dbTable,
|
|
137
135
|
updateFormula: true,
|
|
138
136
|
})
|
|
139
137
|
}
|
|
140
138
|
|
|
141
139
|
exports.save = async function (ctx) {
|
|
142
|
-
const
|
|
143
|
-
const db = new CouchDB(appId)
|
|
140
|
+
const db = getAppDB()
|
|
144
141
|
let inputs = ctx.request.body
|
|
145
142
|
inputs.tableId = ctx.params.tableId
|
|
146
143
|
|
|
@@ -162,21 +159,19 @@ exports.save = async function (ctx) {
|
|
|
162
159
|
|
|
163
160
|
// make sure link rows are up to date
|
|
164
161
|
row = await linkRows.updateLinks({
|
|
165
|
-
appId,
|
|
166
162
|
eventType: linkRows.EventType.ROW_SAVE,
|
|
167
163
|
row,
|
|
168
164
|
tableId: row.tableId,
|
|
169
165
|
table,
|
|
170
166
|
})
|
|
171
167
|
|
|
172
|
-
return finaliseRow(
|
|
168
|
+
return finaliseRow(table, row, {
|
|
173
169
|
oldTable: dbTable,
|
|
174
170
|
updateFormula: true,
|
|
175
171
|
})
|
|
176
172
|
}
|
|
177
173
|
|
|
178
174
|
exports.fetchView = async ctx => {
|
|
179
|
-
const appId = ctx.appId
|
|
180
175
|
const viewName = ctx.params.viewName
|
|
181
176
|
|
|
182
177
|
// if this is a table view being looked for just transfer to that
|
|
@@ -185,7 +180,7 @@ exports.fetchView = async ctx => {
|
|
|
185
180
|
return exports.fetch(ctx)
|
|
186
181
|
}
|
|
187
182
|
|
|
188
|
-
const db =
|
|
183
|
+
const db = getAppDB()
|
|
189
184
|
const { calculation, group, field } = ctx.query
|
|
190
185
|
const viewInfo = await getView(db, viewName)
|
|
191
186
|
let response
|
|
@@ -212,7 +207,7 @@ exports.fetchView = async ctx => {
|
|
|
212
207
|
schema: {},
|
|
213
208
|
}
|
|
214
209
|
}
|
|
215
|
-
rows = await outputProcessing(
|
|
210
|
+
rows = await outputProcessing(table, response.rows)
|
|
216
211
|
}
|
|
217
212
|
|
|
218
213
|
if (calculation === CALCULATION_TYPES.STATS) {
|
|
@@ -239,27 +234,24 @@ exports.fetchView = async ctx => {
|
|
|
239
234
|
}
|
|
240
235
|
|
|
241
236
|
exports.fetch = async ctx => {
|
|
242
|
-
const
|
|
243
|
-
const db = new CouchDB(appId)
|
|
237
|
+
const db = getAppDB()
|
|
244
238
|
|
|
245
239
|
const tableId = ctx.params.tableId
|
|
246
240
|
let table = await db.get(tableId)
|
|
247
241
|
let rows = await getRawTableData(ctx, db, tableId)
|
|
248
|
-
return outputProcessing(
|
|
242
|
+
return outputProcessing(table, rows)
|
|
249
243
|
}
|
|
250
244
|
|
|
251
245
|
exports.find = async ctx => {
|
|
252
|
-
const
|
|
253
|
-
const db = new CouchDB(appId)
|
|
246
|
+
const db = getAppDB()
|
|
254
247
|
const table = await db.get(ctx.params.tableId)
|
|
255
|
-
let row = await findRow(ctx,
|
|
256
|
-
row = await outputProcessing(
|
|
248
|
+
let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
|
|
249
|
+
row = await outputProcessing(table, row)
|
|
257
250
|
return row
|
|
258
251
|
}
|
|
259
252
|
|
|
260
253
|
exports.destroy = async function (ctx) {
|
|
261
|
-
const
|
|
262
|
-
const db = new CouchDB(appId)
|
|
254
|
+
const db = getAppDB()
|
|
263
255
|
const { _id, _rev } = ctx.request.body
|
|
264
256
|
let row = await db.get(_id)
|
|
265
257
|
|
|
@@ -268,18 +260,17 @@ exports.destroy = async function (ctx) {
|
|
|
268
260
|
}
|
|
269
261
|
const table = await db.get(row.tableId)
|
|
270
262
|
// update the row to include full relationships before deleting them
|
|
271
|
-
row = await outputProcessing(
|
|
263
|
+
row = await outputProcessing(table, row, { squash: false })
|
|
272
264
|
// now remove the relationships
|
|
273
265
|
await linkRows.updateLinks({
|
|
274
|
-
appId,
|
|
275
266
|
eventType: linkRows.EventType.ROW_DELETE,
|
|
276
267
|
row,
|
|
277
268
|
tableId: row.tableId,
|
|
278
269
|
})
|
|
279
270
|
// remove any attachments that were on the row from object storage
|
|
280
|
-
await cleanupAttachments(
|
|
271
|
+
await cleanupAttachments(table, { row })
|
|
281
272
|
// remove any static formula
|
|
282
|
-
await updateRelatedFormula(
|
|
273
|
+
await updateRelatedFormula(table, row)
|
|
283
274
|
|
|
284
275
|
let response
|
|
285
276
|
if (ctx.params.tableId === InternalTables.USER_METADATA) {
|
|
@@ -295,20 +286,18 @@ exports.destroy = async function (ctx) {
|
|
|
295
286
|
}
|
|
296
287
|
|
|
297
288
|
exports.bulkDestroy = async ctx => {
|
|
298
|
-
const
|
|
299
|
-
const db = new CouchDB(appId)
|
|
289
|
+
const db = getAppDB()
|
|
300
290
|
const tableId = ctx.params.tableId
|
|
301
291
|
const table = await db.get(tableId)
|
|
302
292
|
let { rows } = ctx.request.body
|
|
303
293
|
|
|
304
294
|
// before carrying out any updates, make sure the rows are ready to be returned
|
|
305
295
|
// they need to be the full rows (including previous relationships) for automations
|
|
306
|
-
rows = await outputProcessing(
|
|
296
|
+
rows = await outputProcessing(table, rows, { squash: false })
|
|
307
297
|
|
|
308
298
|
// remove the relationships first
|
|
309
299
|
let updates = rows.map(row =>
|
|
310
300
|
linkRows.updateLinks({
|
|
311
|
-
appId,
|
|
312
301
|
eventType: linkRows.EventType.ROW_DELETE,
|
|
313
302
|
row,
|
|
314
303
|
tableId: row.tableId,
|
|
@@ -327,8 +316,8 @@ exports.bulkDestroy = async ctx => {
|
|
|
327
316
|
await db.bulkDocs(rows.map(row => ({ ...row, _deleted: true })))
|
|
328
317
|
}
|
|
329
318
|
// remove any attachments that were on the rows from object storage
|
|
330
|
-
await cleanupAttachments(
|
|
331
|
-
await updateRelatedFormula(
|
|
319
|
+
await cleanupAttachments(table, { rows })
|
|
320
|
+
await updateRelatedFormula(table, rows)
|
|
332
321
|
await Promise.all(updates)
|
|
333
322
|
return { response: { ok: true }, rows }
|
|
334
323
|
}
|
|
@@ -339,28 +328,27 @@ exports.search = async ctx => {
|
|
|
339
328
|
return { rows: await exports.fetch(ctx) }
|
|
340
329
|
}
|
|
341
330
|
|
|
342
|
-
const appId = ctx.appId
|
|
343
331
|
const { tableId } = ctx.params
|
|
344
|
-
const db =
|
|
332
|
+
const db = getAppDB()
|
|
345
333
|
const { paginate, query, ...params } = ctx.request.body
|
|
346
334
|
params.version = ctx.version
|
|
347
335
|
params.tableId = tableId
|
|
348
336
|
|
|
349
337
|
let response
|
|
350
338
|
if (paginate) {
|
|
351
|
-
response = await paginatedSearch(
|
|
339
|
+
response = await paginatedSearch(query, params)
|
|
352
340
|
} else {
|
|
353
|
-
response = await fullSearch(
|
|
341
|
+
response = await fullSearch(query, params)
|
|
354
342
|
}
|
|
355
343
|
|
|
356
344
|
// Enrich search results with relationships
|
|
357
345
|
if (response.rows && response.rows.length) {
|
|
358
346
|
// enrich with global users if from users table
|
|
359
347
|
if (tableId === InternalTables.USER_METADATA) {
|
|
360
|
-
response.rows = await getGlobalUsersFromMetadata(
|
|
348
|
+
response.rows = await getGlobalUsersFromMetadata(response.rows)
|
|
361
349
|
}
|
|
362
350
|
const table = await db.get(tableId)
|
|
363
|
-
response.rows = await outputProcessing(
|
|
351
|
+
response.rows = await outputProcessing(table, response.rows)
|
|
364
352
|
}
|
|
365
353
|
|
|
366
354
|
return response
|
|
@@ -368,25 +356,22 @@ exports.search = async ctx => {
|
|
|
368
356
|
|
|
369
357
|
exports.validate = async ctx => {
|
|
370
358
|
return validate({
|
|
371
|
-
appId: ctx.appId,
|
|
372
359
|
tableId: ctx.params.tableId,
|
|
373
360
|
row: ctx.request.body,
|
|
374
361
|
})
|
|
375
362
|
}
|
|
376
363
|
|
|
377
364
|
exports.fetchEnrichedRow = async ctx => {
|
|
378
|
-
const
|
|
379
|
-
const db = new CouchDB(appId)
|
|
365
|
+
const db = getAppDB()
|
|
380
366
|
const tableId = ctx.params.tableId
|
|
381
367
|
const rowId = ctx.params.rowId
|
|
382
368
|
// need table to work out where links go in row
|
|
383
369
|
let [table, row] = await Promise.all([
|
|
384
370
|
db.get(tableId),
|
|
385
|
-
findRow(ctx,
|
|
371
|
+
findRow(ctx, tableId, rowId),
|
|
386
372
|
])
|
|
387
373
|
// get the link docs
|
|
388
374
|
const linkVals = await linkRows.getLinkDocuments({
|
|
389
|
-
appId,
|
|
390
375
|
tableId,
|
|
391
376
|
rowId,
|
|
392
377
|
})
|
|
@@ -413,7 +398,7 @@ exports.fetchEnrichedRow = async ctx => {
|
|
|
413
398
|
for (let [tableId, rows] of Object.entries(groups)) {
|
|
414
399
|
// need to include the IDs in these rows for any links they may have
|
|
415
400
|
linkedRows = linkedRows.concat(
|
|
416
|
-
await outputProcessing(
|
|
401
|
+
await outputProcessing(tables[tableId], rows)
|
|
417
402
|
)
|
|
418
403
|
}
|
|
419
404
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
const { SearchIndexes } = require("../../../db/utils")
|
|
2
2
|
const fetch = require("node-fetch")
|
|
3
3
|
const { getCouchUrl } = require("@budibase/backend-core/db")
|
|
4
|
+
const { getAppId } = require("@budibase/backend-core/context")
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Class to build lucene query URLs.
|
|
7
8
|
* Optionally takes a base lucene query object.
|
|
8
9
|
*/
|
|
9
10
|
class QueryBuilder {
|
|
10
|
-
constructor(
|
|
11
|
-
this.appId = appId
|
|
11
|
+
constructor(base) {
|
|
12
12
|
this.query = {
|
|
13
13
|
string: {},
|
|
14
14
|
fuzzy: {},
|
|
@@ -241,7 +241,8 @@ class QueryBuilder {
|
|
|
241
241
|
}
|
|
242
242
|
|
|
243
243
|
async run() {
|
|
244
|
-
const
|
|
244
|
+
const appId = getAppId()
|
|
245
|
+
const url = `${getCouchUrl()}/${appId}/_design/database/_search/${
|
|
245
246
|
SearchIndexes.ROWS
|
|
246
247
|
}`
|
|
247
248
|
const body = this.buildSearchBody()
|
|
@@ -278,7 +279,6 @@ const runQuery = async (url, body) => {
|
|
|
278
279
|
* Gets round the fixed limit of 200 results from a query by fetching as many
|
|
279
280
|
* pages as required and concatenating the results. This recursively operates
|
|
280
281
|
* until enough results have been found.
|
|
281
|
-
* @param appId {string} The app ID to search
|
|
282
282
|
* @param query {object} The JSON query structure
|
|
283
283
|
* @param params {object} The search params including:
|
|
284
284
|
* tableId {string} The table ID to search
|
|
@@ -291,7 +291,7 @@ const runQuery = async (url, body) => {
|
|
|
291
291
|
* rows {array|null} Current results in the recursive search
|
|
292
292
|
* @returns {Promise<*[]|*>}
|
|
293
293
|
*/
|
|
294
|
-
const recursiveSearch = async (
|
|
294
|
+
const recursiveSearch = async (query, params) => {
|
|
295
295
|
const bookmark = params.bookmark
|
|
296
296
|
const rows = params.rows || []
|
|
297
297
|
if (rows.length >= params.limit) {
|
|
@@ -301,7 +301,7 @@ const recursiveSearch = async (appId, query, params) => {
|
|
|
301
301
|
if (rows.length > params.limit - 200) {
|
|
302
302
|
pageSize = params.limit - rows.length
|
|
303
303
|
}
|
|
304
|
-
const page = await new QueryBuilder(
|
|
304
|
+
const page = await new QueryBuilder(query)
|
|
305
305
|
.setVersion(params.version)
|
|
306
306
|
.setTable(params.tableId)
|
|
307
307
|
.setBookmark(bookmark)
|
|
@@ -321,14 +321,13 @@ const recursiveSearch = async (appId, query, params) => {
|
|
|
321
321
|
bookmark: page.bookmark,
|
|
322
322
|
rows: [...rows, ...page.rows],
|
|
323
323
|
}
|
|
324
|
-
return await recursiveSearch(
|
|
324
|
+
return await recursiveSearch(query, newParams)
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
/**
|
|
328
328
|
* Performs a paginated search. A bookmark will be returned to allow the next
|
|
329
329
|
* page to be fetched. There is a max limit off 200 results per page in a
|
|
330
330
|
* paginated search.
|
|
331
|
-
* @param appId {string} The app ID to search
|
|
332
331
|
* @param query {object} The JSON query structure
|
|
333
332
|
* @param params {object} The search params including:
|
|
334
333
|
* tableId {string} The table ID to search
|
|
@@ -340,13 +339,13 @@ const recursiveSearch = async (appId, query, params) => {
|
|
|
340
339
|
* bookmark {string} The bookmark to resume from
|
|
341
340
|
* @returns {Promise<{hasNextPage: boolean, rows: *[]}>}
|
|
342
341
|
*/
|
|
343
|
-
exports.paginatedSearch = async (
|
|
342
|
+
exports.paginatedSearch = async (query, params) => {
|
|
344
343
|
let limit = params.limit
|
|
345
344
|
if (limit == null || isNaN(limit) || limit < 0) {
|
|
346
345
|
limit = 50
|
|
347
346
|
}
|
|
348
347
|
limit = Math.min(limit, 200)
|
|
349
|
-
const search = new QueryBuilder(
|
|
348
|
+
const search = new QueryBuilder(query)
|
|
350
349
|
.setVersion(params.version)
|
|
351
350
|
.setTable(params.tableId)
|
|
352
351
|
.setSort(params.sort)
|
|
@@ -375,7 +374,6 @@ exports.paginatedSearch = async (appId, query, params) => {
|
|
|
375
374
|
* desired amount of results. There is a limit of 1000 results to avoid
|
|
376
375
|
* heavy performance hits, and to avoid client components breaking from
|
|
377
376
|
* handling too much data.
|
|
378
|
-
* @param appId {string} The app ID to search
|
|
379
377
|
* @param query {object} The JSON query structure
|
|
380
378
|
* @param params {object} The search params including:
|
|
381
379
|
* tableId {string} The table ID to search
|
|
@@ -386,12 +384,12 @@ exports.paginatedSearch = async (appId, query, params) => {
|
|
|
386
384
|
* limit {number} The desired number of results
|
|
387
385
|
* @returns {Promise<{rows: *}>}
|
|
388
386
|
*/
|
|
389
|
-
exports.fullSearch = async (
|
|
387
|
+
exports.fullSearch = async (query, params) => {
|
|
390
388
|
let limit = params.limit
|
|
391
389
|
if (limit == null || isNaN(limit) || limit < 0) {
|
|
392
390
|
limit = 1000
|
|
393
391
|
}
|
|
394
392
|
params.limit = Math.min(limit, 1000)
|
|
395
|
-
const rows = await recursiveSearch(
|
|
393
|
+
const rows = await recursiveSearch(query, params)
|
|
396
394
|
return { rows }
|
|
397
395
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const CouchDB = require("../../../db")
|
|
2
1
|
const { getRowParams } = require("../../../db/utils")
|
|
3
2
|
const {
|
|
4
3
|
outputProcessing,
|
|
@@ -8,6 +7,7 @@ const {
|
|
|
8
7
|
const { FieldTypes, FormulaTypes } = require("../../../constants")
|
|
9
8
|
const { isEqual } = require("lodash")
|
|
10
9
|
const { cloneDeep } = require("lodash/fp")
|
|
10
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* This function runs through a list of enriched rows, looks at the rows which
|
|
@@ -15,8 +15,8 @@ const { cloneDeep } = require("lodash/fp")
|
|
|
15
15
|
* updated.
|
|
16
16
|
* NOTE: this will only for affect static formulas.
|
|
17
17
|
*/
|
|
18
|
-
exports.updateRelatedFormula = async (
|
|
19
|
-
const db =
|
|
18
|
+
exports.updateRelatedFormula = async (table, enrichedRows) => {
|
|
19
|
+
const db = getAppDB()
|
|
20
20
|
// no formula to update, we're done
|
|
21
21
|
if (!table.relatedFormula) {
|
|
22
22
|
return
|
|
@@ -57,7 +57,7 @@ exports.updateRelatedFormula = async (appId, table, enrichedRows) => {
|
|
|
57
57
|
// re-enrich rows for all the related, don't update the related formula for them
|
|
58
58
|
promises = promises.concat(
|
|
59
59
|
relatedRows[tableId].map(related =>
|
|
60
|
-
exports.finaliseRow(
|
|
60
|
+
exports.finaliseRow(relatedTable, related, {
|
|
61
61
|
updateFormula: false,
|
|
62
62
|
})
|
|
63
63
|
)
|
|
@@ -69,8 +69,8 @@ exports.updateRelatedFormula = async (appId, table, enrichedRows) => {
|
|
|
69
69
|
await Promise.all(promises)
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
exports.updateAllFormulasInTable = async
|
|
73
|
-
const db =
|
|
72
|
+
exports.updateAllFormulasInTable = async table => {
|
|
73
|
+
const db = getAppDB()
|
|
74
74
|
// start by getting the raw rows (which will be written back to DB after update)
|
|
75
75
|
let rows = (
|
|
76
76
|
await db.allDocs(
|
|
@@ -81,7 +81,7 @@ exports.updateAllFormulasInTable = async (appId, table) => {
|
|
|
81
81
|
).rows.map(row => row.doc)
|
|
82
82
|
// now enrich the rows, note the clone so that we have the base state of the
|
|
83
83
|
// rows so that we don't write any of the enriched information back
|
|
84
|
-
let enrichedRows = await outputProcessing(
|
|
84
|
+
let enrichedRows = await outputProcessing(table, cloneDeep(rows), {
|
|
85
85
|
squash: false,
|
|
86
86
|
})
|
|
87
87
|
const updatedRows = []
|
|
@@ -109,15 +109,14 @@ exports.updateAllFormulasInTable = async (appId, table) => {
|
|
|
109
109
|
* expects the row to be totally enriched/contain all relationships.
|
|
110
110
|
*/
|
|
111
111
|
exports.finaliseRow = async (
|
|
112
|
-
appId,
|
|
113
112
|
table,
|
|
114
113
|
row,
|
|
115
114
|
{ oldTable, updateFormula } = { updateFormula: true }
|
|
116
115
|
) => {
|
|
117
|
-
const db =
|
|
116
|
+
const db = getAppDB()
|
|
118
117
|
row.type = "row"
|
|
119
118
|
// process the row before return, to include relationships
|
|
120
|
-
let enrichedRow = await outputProcessing(
|
|
119
|
+
let enrichedRow = await outputProcessing(table, cloneDeep(row), {
|
|
121
120
|
squash: false,
|
|
122
121
|
})
|
|
123
122
|
// use enriched row to generate formulas for saving, specifically only use as context
|
|
@@ -151,7 +150,7 @@ exports.finaliseRow = async (
|
|
|
151
150
|
enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
|
|
152
151
|
// this updates the related formulas in other rows based on the relations to this row
|
|
153
152
|
if (updateFormula) {
|
|
154
|
-
await exports.updateRelatedFormula(
|
|
153
|
+
await exports.updateRelatedFormula(table, enrichedRow)
|
|
155
154
|
}
|
|
156
155
|
return { row: enrichedRow, table }
|
|
157
156
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const validateJs = require("validate.js")
|
|
2
2
|
const { cloneDeep } = require("lodash/fp")
|
|
3
|
-
const CouchDB = require("../../../db")
|
|
4
3
|
const { InternalTables } = require("../../../db/utils")
|
|
5
4
|
const userController = require("../user")
|
|
6
5
|
const { FieldTypes } = require("../../../constants")
|
|
7
6
|
const { processStringSync } = require("@budibase/string-templates")
|
|
8
7
|
const { makeExternalQuery } = require("../../../integrations/base/utils")
|
|
8
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
9
|
|
|
10
10
|
validateJs.extend(validateJs.validators.datetime, {
|
|
11
11
|
parse: function (value) {
|
|
@@ -17,14 +17,15 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
17
17
|
},
|
|
18
18
|
})
|
|
19
19
|
|
|
20
|
-
exports.getDatasourceAndQuery = async
|
|
20
|
+
exports.getDatasourceAndQuery = async json => {
|
|
21
21
|
const datasourceId = json.endpoint.datasourceId
|
|
22
|
-
const db =
|
|
22
|
+
const db = getAppDB()
|
|
23
23
|
const datasource = await db.get(datasourceId)
|
|
24
24
|
return makeExternalQuery(datasource, json)
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
exports.findRow = async (ctx,
|
|
27
|
+
exports.findRow = async (ctx, tableId, rowId) => {
|
|
28
|
+
const db = getAppDB()
|
|
28
29
|
let row
|
|
29
30
|
// TODO remove special user case in future
|
|
30
31
|
if (tableId === InternalTables.USER_METADATA) {
|
|
@@ -42,9 +43,9 @@ exports.findRow = async (ctx, db, tableId, rowId) => {
|
|
|
42
43
|
return row
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
exports.validate = async ({
|
|
46
|
+
exports.validate = async ({ tableId, row, table }) => {
|
|
46
47
|
if (!table) {
|
|
47
|
-
const db =
|
|
48
|
+
const db = getAppDB()
|
|
48
49
|
table = await db.get(tableId)
|
|
49
50
|
}
|
|
50
51
|
const errors = {}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
const CouchDB = require("../../db")
|
|
2
1
|
const { getScreenParams, generateScreenID } = require("../../db/utils")
|
|
3
2
|
const { AccessController } = require("@budibase/backend-core/roles")
|
|
3
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
4
4
|
|
|
5
5
|
exports.fetch = async ctx => {
|
|
6
|
-
const
|
|
7
|
-
const db = new CouchDB(appId)
|
|
6
|
+
const db = getAppDB()
|
|
8
7
|
|
|
9
8
|
const screens = (
|
|
10
9
|
await db.allDocs(
|
|
@@ -14,15 +13,14 @@ exports.fetch = async ctx => {
|
|
|
14
13
|
)
|
|
15
14
|
).rows.map(element => element.doc)
|
|
16
15
|
|
|
17
|
-
ctx.body = await new AccessController(
|
|
16
|
+
ctx.body = await new AccessController().checkScreensAccess(
|
|
18
17
|
screens,
|
|
19
18
|
ctx.user.role._id
|
|
20
19
|
)
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
exports.save = async ctx => {
|
|
24
|
-
const
|
|
25
|
-
const db = new CouchDB(appId)
|
|
23
|
+
const db = getAppDB()
|
|
26
24
|
let screen = ctx.request.body
|
|
27
25
|
|
|
28
26
|
if (!screen._id) {
|
|
@@ -39,7 +37,7 @@ exports.save = async ctx => {
|
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
exports.destroy = async ctx => {
|
|
42
|
-
const db =
|
|
40
|
+
const db = getAppDB()
|
|
43
41
|
await db.remove(ctx.params.screenId, ctx.params.screenRev)
|
|
44
42
|
ctx.body = {
|
|
45
43
|
message: "Screen deleted successfully",
|
|
@@ -6,7 +6,6 @@ const uuid = require("uuid")
|
|
|
6
6
|
const { ObjectStoreBuckets } = require("../../../constants")
|
|
7
7
|
const { processString } = require("@budibase/string-templates")
|
|
8
8
|
const { getAllApps } = require("@budibase/backend-core/db")
|
|
9
|
-
const CouchDB = require("../../../db")
|
|
10
9
|
const {
|
|
11
10
|
loadHandlebarsFile,
|
|
12
11
|
NODE_MODULES_PATH,
|
|
@@ -17,6 +16,7 @@ const { clientLibraryPath } = require("../../../utilities")
|
|
|
17
16
|
const { upload } = require("../../../utilities/fileSystem")
|
|
18
17
|
const { attachmentsRelativeURL } = require("../../../utilities")
|
|
19
18
|
const { DocumentTypes } = require("../../../db/utils")
|
|
19
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
20
20
|
const AWS = require("aws-sdk")
|
|
21
21
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1"
|
|
22
22
|
|
|
@@ -44,7 +44,7 @@ async function getAppIdFromUrl(ctx) {
|
|
|
44
44
|
let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`
|
|
45
45
|
|
|
46
46
|
// search prod apps for a url that matches, exclude dev where id is always used
|
|
47
|
-
const apps = await getAllApps(
|
|
47
|
+
const apps = await getAllApps({ dev: false })
|
|
48
48
|
const app = apps.filter(
|
|
49
49
|
a => a.url && a.url.toLowerCase() === possibleAppUrl
|
|
50
50
|
)[0]
|
|
@@ -85,7 +85,7 @@ exports.uploadFile = async function (ctx) {
|
|
|
85
85
|
exports.serveApp = async function (ctx) {
|
|
86
86
|
let appId = await getAppIdFromUrl(ctx)
|
|
87
87
|
const App = require("./templates/BudibaseApp.svelte").default
|
|
88
|
-
const db =
|
|
88
|
+
const db = getAppDB({ skip_setup: true })
|
|
89
89
|
const appInfo = await db.get(DocumentTypes.APP_METADATA)
|
|
90
90
|
|
|
91
91
|
const { head, html, css } = App.render({
|
|
@@ -111,7 +111,7 @@ exports.serveClientLibrary = async function (ctx) {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
exports.getSignedUploadURL = async function (ctx) {
|
|
114
|
-
const database =
|
|
114
|
+
const database = getAppDB()
|
|
115
115
|
|
|
116
116
|
// Ensure datasource is valid
|
|
117
117
|
let datasource
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const CouchDB = require("../../../db")
|
|
2
1
|
const { FieldTypes, FormulaTypes } = require("../../../constants")
|
|
3
2
|
const { getAllInternalTables, clearColumns } = require("./utils")
|
|
4
3
|
const { doesContainStrings } = require("@budibase/string-templates")
|
|
5
4
|
const { cloneDeep } = require("lodash/fp")
|
|
6
5
|
const { isEqual, uniq } = require("lodash")
|
|
7
6
|
const { updateAllFormulasInTable } = require("../row/staticFormula")
|
|
7
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
8
8
|
|
|
9
9
|
function isStaticFormula(column) {
|
|
10
10
|
return (
|
|
@@ -37,14 +37,9 @@ function getFormulaThatUseColumn(table, columnNames) {
|
|
|
37
37
|
* This functions checks for when a related table, column or related column is deleted, if any
|
|
38
38
|
* tables need to have the formula column removed.
|
|
39
39
|
*/
|
|
40
|
-
async function checkIfFormulaNeedsCleared(
|
|
41
|
-
appId,
|
|
42
|
-
table,
|
|
43
|
-
{ oldTable, deletion }
|
|
44
|
-
) {
|
|
45
|
-
const db = new CouchDB(appId)
|
|
40
|
+
async function checkIfFormulaNeedsCleared(table, { oldTable, deletion }) {
|
|
46
41
|
// start by retrieving all tables, remove the current table from the list
|
|
47
|
-
const tables = (await getAllInternalTables(
|
|
42
|
+
const tables = (await getAllInternalTables()).filter(
|
|
48
43
|
tbl => tbl._id !== table._id
|
|
49
44
|
)
|
|
50
45
|
const schemaToUse = oldTable ? oldTable.schema : table.schema
|
|
@@ -60,7 +55,7 @@ async function checkIfFormulaNeedsCleared(
|
|
|
60
55
|
}
|
|
61
56
|
const columnsToDelete = getFormulaThatUseColumn(tableToUse, removed.name)
|
|
62
57
|
if (columnsToDelete.length > 0) {
|
|
63
|
-
await clearColumns(
|
|
58
|
+
await clearColumns(table, columnsToDelete)
|
|
64
59
|
}
|
|
65
60
|
// need a special case, where a column has been removed from this table, but was used
|
|
66
61
|
// in a different, related tables formula
|
|
@@ -85,7 +80,7 @@ async function checkIfFormulaNeedsCleared(
|
|
|
85
80
|
)
|
|
86
81
|
}
|
|
87
82
|
if (relatedFormulaToRemove.length > 0) {
|
|
88
|
-
await clearColumns(
|
|
83
|
+
await clearColumns(relatedTable, uniq(relatedFormulaToRemove))
|
|
89
84
|
}
|
|
90
85
|
}
|
|
91
86
|
}
|
|
@@ -99,13 +94,12 @@ async function checkIfFormulaNeedsCleared(
|
|
|
99
94
|
* specifically only for static formula.
|
|
100
95
|
*/
|
|
101
96
|
async function updateRelatedFormulaLinksOnTables(
|
|
102
|
-
appId,
|
|
103
97
|
table,
|
|
104
98
|
{ deletion } = { deletion: false }
|
|
105
99
|
) {
|
|
106
|
-
const db =
|
|
100
|
+
const db = getAppDB()
|
|
107
101
|
// start by retrieving all tables, remove the current table from the list
|
|
108
|
-
const tables = (await getAllInternalTables(
|
|
102
|
+
const tables = (await getAllInternalTables()).filter(
|
|
109
103
|
tbl => tbl._id !== table._id
|
|
110
104
|
)
|
|
111
105
|
// clone the tables, so we can compare at end
|
|
@@ -155,7 +149,7 @@ async function updateRelatedFormulaLinksOnTables(
|
|
|
155
149
|
}
|
|
156
150
|
}
|
|
157
151
|
|
|
158
|
-
async function checkIfFormulaUpdated(
|
|
152
|
+
async function checkIfFormulaUpdated(table, { oldTable }) {
|
|
159
153
|
// look to see if any formula values have changed
|
|
160
154
|
const shouldUpdate = Object.values(table.schema).find(
|
|
161
155
|
column =>
|
|
@@ -166,18 +160,14 @@ async function checkIfFormulaUpdated(appId, table, { oldTable }) {
|
|
|
166
160
|
)
|
|
167
161
|
// if a static formula column has updated, then need to run the update
|
|
168
162
|
if (shouldUpdate != null) {
|
|
169
|
-
await updateAllFormulasInTable(
|
|
163
|
+
await updateAllFormulasInTable(table)
|
|
170
164
|
}
|
|
171
165
|
}
|
|
172
166
|
|
|
173
|
-
exports.runStaticFormulaChecks = async (
|
|
174
|
-
|
|
175
|
-
table,
|
|
176
|
-
{ oldTable, deletion }
|
|
177
|
-
) => {
|
|
178
|
-
await updateRelatedFormulaLinksOnTables(appId, table, { deletion })
|
|
179
|
-
await checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion })
|
|
167
|
+
exports.runStaticFormulaChecks = async (table, { oldTable, deletion }) => {
|
|
168
|
+
await updateRelatedFormulaLinksOnTables(table, { deletion })
|
|
169
|
+
await checkIfFormulaNeedsCleared(table, { oldTable, deletion })
|
|
180
170
|
if (!deletion) {
|
|
181
|
-
await checkIfFormulaUpdated(
|
|
171
|
+
await checkIfFormulaUpdated(table, { oldTable })
|
|
182
172
|
}
|
|
183
173
|
}
|