From 02efad9fc4fe0183f8d5f76d83cac018bf14d8eb Mon Sep 17 00:00:00 2001 From: Artem Niehrieiev Date: Thu, 14 May 2026 15:22:17 +0000 Subject: [PATCH] feat: add invalidateMetadataCache method to data access objects and update usage in GetConnectionDiagramUseCase --- .../connection/use-cases/get-connection-diagram.use.case.ts | 1 + .../data-access-objects/basic-data-access-object.ts | 6 ++++++ .../data-access-objects/data-access-object-agent.ts | 4 ++++ .../shared/interfaces/data-access-object-agent.interface.ts | 2 ++ .../src/shared/interfaces/data-access-object.interface.ts | 2 ++ 5 files changed, 15 insertions(+) diff --git a/backend/src/entities/connection/use-cases/get-connection-diagram.use.case.ts b/backend/src/entities/connection/use-cases/get-connection-diagram.use.case.ts index 41b1c59f9..0597b67e6 100644 --- a/backend/src/entities/connection/use-cases/get-connection-diagram.use.case.ts +++ b/backend/src/entities/connection/use-cases/get-connection-diagram.use.case.ts @@ -46,6 +46,7 @@ export class GetConnectionDiagramUseCase : undefined; await validateSchemaCache(dao, userEmail); + dao.invalidateMetadataCache(); let tables: Array<{ tableName: string; isView: boolean }>; try { diff --git a/shared-code/src/data-access-layer/data-access-objects/basic-data-access-object.ts b/shared-code/src/data-access-layer/data-access-objects/basic-data-access-object.ts index deb4ab7f0..84e3b6741 100644 --- a/shared-code/src/data-access-layer/data-access-objects/basic-data-access-object.ts +++ b/shared-code/src/data-access-layer/data-access-objects/basic-data-access-object.ts @@ -1,4 +1,5 @@ import { Knex } from 'knex'; +import { LRUStorage } from '../../caching/lru-storage.js'; import { isObjectEmpty } from '../../helpers/is-object-empty.js'; import { KnexManager } from '../../knex-manager/knex-manager.js'; import { ConnectionParams } from '../shared/data-structures/connections-params.ds.js'; @@ -11,6 +12,11 @@ export class BasicDataAccessObject { constructor(connection: ConnectionParams) { this.connection = connection; } + + public invalidateMetadataCache(): void { + LRUStorage.invalidateConnectionTableMetadata(this.connection); + } + protected async configureKnex(): Promise> { const knexManager = KnexManager.knexStorage(); return knexManager.get(this.connection.type)(this.connection); diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-agent.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-agent.ts index c3aa5f3e1..caec4321e 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-agent.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-agent.ts @@ -40,6 +40,10 @@ export class DataAccessObjectAgent implements IDataAccessObjectAgent { this.connection = connection; } + public invalidateMetadataCache(): void { + LRUStorage.invalidateConnectionTableMetadata(this.connection); + } + public async addRowInTable( tableName: string, row: Record, diff --git a/shared-code/src/shared/interfaces/data-access-object-agent.interface.ts b/shared-code/src/shared/interfaces/data-access-object-agent.interface.ts index eaedfebd5..ff020facb 100644 --- a/shared-code/src/shared/interfaces/data-access-object-agent.interface.ts +++ b/shared-code/src/shared/interfaces/data-access-object-agent.interface.ts @@ -68,6 +68,8 @@ export interface IDataAccessObjectAgent { getTableStructureWithoutCache(tableName: string, userEmail: string): Promise>; + invalidateMetadataCache(): void; + testConnect(): Promise; updateRowInTable( diff --git a/shared-code/src/shared/interfaces/data-access-object.interface.ts b/shared-code/src/shared/interfaces/data-access-object.interface.ts index 2698454aa..45e3adb40 100644 --- a/shared-code/src/shared/interfaces/data-access-object.interface.ts +++ b/shared-code/src/shared/interfaces/data-access-object.interface.ts @@ -56,6 +56,8 @@ export interface IDataAccessObject { getTableStructureWithoutCache(tableName: string): Promise>; + invalidateMetadataCache(): void; + testConnect(): Promise; updateRowInTable(