From ab6afc05e31da209ce25335b4f1cb1f8d1452f9e Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Wed, 27 May 2026 00:54:41 +0200 Subject: [PATCH] fix(support): rewrite legacy 'asset' table alias to 'asset_account' PR #193 added a PG view aliasing the renamed asset table, but SupportService.getRawData uses TypeORM's QueryBuilder, which requires an entity-backed alias. 'asset' has no registered entity (renamed to 'asset_account' in migration 1715583133193), so the QueryBuilder throws "Cannot get entity metadata for the given alias 'asset'" before ever reaching the view. External callers (e.g. Google Apps Script ledgers) get HTTP 400 instead of data. Rewrite the table name and the 'asset.' prefix in select/where/join inputs to 'asset_account' before passing to the QueryBuilder. The existing entity metadata for AssetAccountEntity is picked up via the matching tableName, and the request flows end-to-end. Refs #192, follow-up to #193 --- .../support/services/support.service.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/subdomains/support/services/support.service.ts b/src/subdomains/support/services/support.service.ts index 0715bb2da..134db72b4 100644 --- a/src/subdomains/support/services/support.service.ts +++ b/src/subdomains/support/services/support.service.ts @@ -81,6 +81,21 @@ export class SupportService implements OnModuleDestroy { } async getRawData(query: DbQueryDto): Promise { + // Compat: external callers (e.g. Google Apps Script ledgers) still reference + // the pre-2024 `asset` table name. PR #193 added a PG view, but the + // QueryBuilder requires an entity-backed alias and `asset` is no longer a + // registered entity. Rewrite to `asset_account` here so the QueryBuilder + // path resolves correctly. See issue #192. + if (query.table === 'asset') { + query = { + ...query, + table: 'asset_account', + select: query.select?.map((s) => s.replace(/^asset\./, 'asset_account.')), + where: query.where.map(([cond, params]) => [cond.replace(/\basset\./g, 'asset_account.'), params]), + join: query.join.map(([rel, alias]) => [rel.replace(/^asset\./, 'asset_account.'), alias]), + }; + } + const request = this.dataSource .createQueryBuilder() .from(query.table, query.table)