From ac5be19649eec29876152645d526ba7afc7f7633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arwid=20Thornstr=C3=B6m?= Date: Fri, 22 Oct 2021 14:39:46 +0200 Subject: [PATCH] 77 more search options (#78) * added search for copyright * added search by reference --- src/datasources/product-api.ts | 16 ++++++++++++++++ src/datasources/sql/products-sql.ts | 8 ++++++++ src/resolvers/products-resolver.ts | 2 ++ 3 files changed, 26 insertions(+) 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 {