diff --git a/src/datasources/product-api.ts b/src/datasources/product-api.ts index c114bcf..5d4dafc 100644 --- a/src/datasources/product-api.ts +++ b/src/datasources/product-api.ts @@ -259,6 +259,22 @@ export class ProductAPI extends BaseSQLDataSource { }); } + async searchByCopyright(name: string): Promise> { + const query = sql.searchByFieldValue(25); // copyright + + return this.knex + .raw(query, name) + .then((data) => data.rows.map((row) => this.createProductFromRow(row))); + } + + async searchByReferences(name: string): Promise> { + const query = sql.referenceProducts(); // ref1, ref2, ref3 + + return this.knex + .raw(query, [name, name, name]) + .then((data) => data.rows.map((row) => this.createProductFromRow(row))); + } + async getRelatedProducts(id: number): Promise> { const ids = await this.knex .raw( diff --git a/src/datasources/sql/products-sql.ts b/src/datasources/sql/products-sql.ts index 6bf0fde..e120d2e 100644 --- a/src/datasources/sql/products-sql.ts +++ b/src/datasources/sql/products-sql.ts @@ -161,6 +161,14 @@ export function designerProducts() { ); } +export function referenceProducts() { + return ( + baseQuery + + /* sql */ ` + WHERE LOWER(products.ref1) LIKE ? OR LOWER(products.ref2) LIKE ? OR LOWER(products.ref3) LIKE ? ORDER BY products.inserted DESC` + ); +} + export function keywordProducts(keywordId: number) { return ( baseQuery + diff --git a/src/resolvers/products-resolver.ts b/src/resolvers/products-resolver.ts index ad63f6d..c1e1154 100644 --- a/src/resolvers/products-resolver.ts +++ b/src/resolvers/products-resolver.ts @@ -84,6 +84,8 @@ async function getProductsSearchResult( const prods = Promise.all([ prodApi.searchByName(q), prodApi.searchByArtNo(q), + prodApi.searchByCopyright(q), + prodApi.searchByReferences(q), ]).then((d) => d.flat()); return {