From 1851e11bc08fd50a1bbc603f4bc01e416e984b7b Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 8 Jul 2024 13:28:48 +0100 Subject: [PATCH] wip --- packages/backend-core/src/db/couch/utils.ts | 10 ++++++++++ packages/backend-core/src/environment.ts | 2 ++ packages/server/src/api/controllers/table/utils.ts | 12 ++++++------ packages/server/src/sdk/app/rows/search.ts | 4 ++-- packages/server/src/sdk/app/tables/getters.ts | 4 ++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/backend-core/src/db/couch/utils.ts b/packages/backend-core/src/db/couch/utils.ts index 270d953320..8502bd9ab6 100644 --- a/packages/backend-core/src/db/couch/utils.ts +++ b/packages/backend-core/src/db/couch/utils.ts @@ -1,6 +1,8 @@ import { getCouchInfo } from "./connections" import fetch from "node-fetch" import { checkSlashesInUrl } from "../../helpers" +import * as context from "../../context" +import env from "../../environment" export async function directCouchCall( path: string, @@ -53,3 +55,11 @@ export async function directCouchQuery( throw "Cannot connect to CouchDB instance" } } + +export function isSqsEnabledForTenant(): boolean { + const tenantId = context.getTenantId() + return ( + env.SQS_SEARCH_ENABLE !== undefined && + env.SQS_SEARCH_ENABLE_TENANTS.includes(tenantId) + ) +} diff --git a/packages/backend-core/src/environment.ts b/packages/backend-core/src/environment.ts index e06d51f918..06256239f1 100644 --- a/packages/backend-core/src/environment.ts +++ b/packages/backend-core/src/environment.ts @@ -116,6 +116,8 @@ const environment = { COUCH_DB_URL: process.env.COUCH_DB_URL || "http://localhost:4005", COUCH_DB_SQL_URL: process.env.COUCH_DB_SQL_URL || "http://localhost:4006", SQS_SEARCH_ENABLE: process.env.SQS_SEARCH_ENABLE, + SQS_SEARCH_ENABLE_TENANTS: + process.env.SQS_SEARCH_ENABLE_TENANTS?.split(",") || [], COUCH_DB_USERNAME: process.env.COUCH_DB_USER, COUCH_DB_PASSWORD: process.env.COUCH_DB_PASSWORD, GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, diff --git a/packages/server/src/api/controllers/table/utils.ts b/packages/server/src/api/controllers/table/utils.ts index 0e9a32b294..5e5b14e6f2 100644 --- a/packages/server/src/api/controllers/table/utils.ts +++ b/packages/server/src/api/controllers/table/utils.ts @@ -15,7 +15,7 @@ import { getViews, saveView } from "../view/utils" import viewTemplate from "../view/viewBuilder" import { cloneDeep } from "lodash/fp" import { quotas } from "@budibase/pro" -import { events, context } from "@budibase/backend-core" +import { events, context, db } from "@budibase/backend-core" import { AutoFieldSubType, ContextUser, @@ -324,7 +324,7 @@ class TableSaveFunctions { importRows: this.importRows, user: this.user, }) - if (env.SQS_SEARCH_ENABLE) { + if (db.isSqsEnabledForTenant()) { await sdk.tables.sqs.addTable(table) } return table @@ -498,16 +498,16 @@ export function setStaticSchemas(datasource: Datasource, table: Table) { } export async function internalTableCleanup(table: Table, rows?: Row[]) { - const db = context.getAppDB() + const appDb = context.getAppDB() const tableId = table._id! // remove table search index if (!env.isTest() || env.COUCH_DB_URL) { - const currentIndexes = await db.getIndexes() + const currentIndexes = await appDb.getIndexes() const existingIndex = currentIndexes.indexes.find( (existing: any) => existing.name === `search:${tableId}` ) if (existingIndex) { - await db.deleteIndex(existingIndex) + await appDb.deleteIndex(existingIndex) } } @@ -518,7 +518,7 @@ export async function internalTableCleanup(table: Table, rows?: Row[]) { if (rows) { await AttachmentCleanup.tableDelete(table, rows) } - if (env.SQS_SEARCH_ENABLE) { + if (db.isSqsEnabledForTenant()) { await sdk.tables.sqs.removeTable(table) } } diff --git a/packages/server/src/sdk/app/rows/search.ts b/packages/server/src/sdk/app/rows/search.ts index 286a88054c..6ead244601 100644 --- a/packages/server/src/sdk/app/rows/search.ts +++ b/packages/server/src/sdk/app/rows/search.ts @@ -12,11 +12,11 @@ import * as internal from "./search/internal" import * as external from "./search/external" import { NoEmptyFilterStrings } from "../../../constants" import * as sqs from "./search/sqs" -import env from "../../../environment" import { ExportRowsParams, ExportRowsResult } from "./search/types" import { dataFilters } from "@budibase/shared-core" import sdk from "../../index" import { searchInputMapping } from "./search/utils" +import { db } from "@budibase/backend-core" export { isValidFilter } from "../../../integrations/utils" @@ -115,7 +115,7 @@ export async function search( if (isExternalTable) { return external.search(options, table) - } else if (env.SQS_SEARCH_ENABLE) { + } else if (db.isSqsEnabledForTenant()) { return sqs.search(options, table) } else { return internal.search(options, table) diff --git a/packages/server/src/sdk/app/tables/getters.ts b/packages/server/src/sdk/app/tables/getters.ts index 738e57eff8..a12933c966 100644 --- a/packages/server/src/sdk/app/tables/getters.ts +++ b/packages/server/src/sdk/app/tables/getters.ts @@ -1,4 +1,4 @@ -import { context } from "@budibase/backend-core" +import { context, db } from "@budibase/backend-core" import { getTableParams } from "../../../db/utils" import { breakExternalTableId, @@ -34,7 +34,7 @@ export function processTable(table: Table): Table { sourceId: table.sourceId || INTERNAL_TABLE_SOURCE_ID, sourceType: TableSourceType.INTERNAL, } - if (env.SQS_SEARCH_ENABLE) { + if (db.isSqsEnabledForTenant()) { processed.sql = !!env.SQS_SEARCH_ENABLE } return processed