From c9e57fcb198d44aa4f422a355f7266dc9c812863 Mon Sep 17 00:00:00 2001 From: Nawaz Dhandala Date: Tue, 21 Oct 2025 15:46:57 +0100 Subject: [PATCH] feat(analytics): add Projection type and use typed projections in models and table creation --- .../AnalyticsBaseModel/AnalyticsBaseModel.ts | 9 +++++---- Common/Types/AnalyticsDatabase/Projection.ts | 4 ++++ Worker/Utils/AnalyticsDatabase/TableManegement.ts | 7 ++++--- 3 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 Common/Types/AnalyticsDatabase/Projection.ts diff --git a/Common/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts b/Common/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts index bf1a55ef75..1d9ef275f9 100644 --- a/Common/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts +++ b/Common/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts @@ -3,6 +3,7 @@ import Route from "../../../Types/API/Route"; import AnalyticsTableEngine from "../../../Types/AnalyticsDatabase/AnalyticsTableEngine"; import AnalyticsTableColumn from "../../../Types/AnalyticsDatabase/TableColumn"; import TableColumnType from "../../../Types/AnalyticsDatabase/TableColumnType"; +import Projection from "../../../Types/AnalyticsDatabase/Projection"; import { ColumnAccessControl, TableAccessControl, @@ -40,7 +41,7 @@ export default class AnalyticsBaseModel extends CommonModel { enableWorkflowOn?: EnableWorkflowOn | undefined; enableRealtimeEventsOn?: EnableRealtimeEventsOn | undefined; partitionKey: string; - projections: Array | undefined; + projections?: Array | undefined; }) { super({ tableColumns: data.tableColumns, @@ -252,11 +253,11 @@ export default class AnalyticsBaseModel extends CommonModel { this._crudApiPath = v; } - private _projections: Array = []; - public get projections(): Array { + private _projections: Array = []; + public get projections(): Array { return this._projections; } - public set projections(v: Array) { + public set projections(v: Array) { this._projections = v; } diff --git a/Common/Types/AnalyticsDatabase/Projection.ts b/Common/Types/AnalyticsDatabase/Projection.ts new file mode 100644 index 0000000000..e7def6428c --- /dev/null +++ b/Common/Types/AnalyticsDatabase/Projection.ts @@ -0,0 +1,4 @@ +export default interface Projection { + name: string; + query: string; +} diff --git a/Worker/Utils/AnalyticsDatabase/TableManegement.ts b/Worker/Utils/AnalyticsDatabase/TableManegement.ts index 8f73e3f403..20aaded547 100644 --- a/Worker/Utils/AnalyticsDatabase/TableManegement.ts +++ b/Worker/Utils/AnalyticsDatabase/TableManegement.ts @@ -1,4 +1,5 @@ import { AnalyticsServices } from "Common/Server/Services/Index"; +import Projection from "Common/Types/AnalyticsDatabase/Projection"; export default class AnalyticsTableManagement { public static async createTables(): Promise { @@ -8,14 +9,14 @@ export default class AnalyticsTableManagement { service.statementGenerator.toTableCreateStatement(), ); - const projections: Array = service.model.projections; + const projections: Array = service.model.projections; for (const projection of projections) { - if (!projection || projection.trim().length === 0) { + if (!projection.query || projection.query.trim().length === 0) { continue; } - await service.execute(projection); + await service.execute(projection.query); } } }