diff --git a/src/datasources/product-api.ts b/src/datasources/product-api.ts index 152fb3e..fc02df1 100644 --- a/src/datasources/product-api.ts +++ b/src/datasources/product-api.ts @@ -106,6 +106,19 @@ export class ProductAPI extends BaseSQLDataSource { }); } + getLocaleNames(row: any): Record { + if (!row.localizednames) { + return {}; + } + return row.localizednames.reduce( + (result: Record, ln: any) => { + result[ln.locale_name] = ln.name; + return result; + }, + {}, + ); + } + getProductFields(row: any): ProductFields { if (!row.fields) { return null; // 53460 for example @@ -118,6 +131,7 @@ export class ProductAPI extends BaseSQLDataSource { fields['artNo'] = fields['artNo'] ?? ''; // some actually exists without artNo fields['name'] = fields['name'] ?? ''; // some actually exists without name + fields['localeNames'] = this.getLocaleNames(row); fields['copyright'] = fields['copyright'] ?? ''; fields['comments'] = fields['comments'] ?? ''; fields['batch'] = fields['batch'] ?? ''; diff --git a/src/datasources/sql/products-sql.ts b/src/datasources/sql/products-sql.ts index 40c0277..8ba1d21 100644 --- a/src/datasources/sql/products-sql.ts +++ b/src/datasources/sql/products-sql.ts @@ -62,6 +62,18 @@ SELECT products.productid AS id, JOIN "product-fields" fields ON fields.fieldid = pf.fieldid WHERE pf.productid = products.productid ) AS fields, + ( + SELECT json_agg( + json_build_object( + 'name', td.text, + 'locale_id', td.locale_id, + 'locale_name', l.value + ) + ) AS result FROM public."i18n-texts" t + JOIN "i18n-texts_data" td ON t.textid = td.textid + JOIN locales l ON td.locale_id = l.id + WHERE t.name = CAST(products.productid AS text) + ) AS localizednames, ( SELECT json_agg(keywords.value) FROM product_keyword pk diff --git a/src/schema.graphql b/src/schema.graphql index cc73591..a49bf3d 100644 --- a/src/schema.graphql +++ b/src/schema.graphql @@ -284,6 +284,7 @@ type Product { type ProductFields { artNo: String! name: String! + localeNames: JSON height: Int width: Int photowallResolution: Int diff --git a/src/types/product-types.ts b/src/types/product-types.ts index e6ced48..8875aa4 100644 --- a/src/types/product-types.ts +++ b/src/types/product-types.ts @@ -159,6 +159,7 @@ export interface Product { export interface ProductFields { artNo: string; name: string; + localeNames: Array>; height?: number; width?: number; photowallResolution?: number;