diff --git a/src/datasources/product-api.ts b/src/datasources/product-api.ts index bc6ded4..8415a1b 100644 --- a/src/datasources/product-api.ts +++ b/src/datasources/product-api.ts @@ -194,6 +194,18 @@ export class ProductAPI extends BaseSQLDataSource { return res.find(Boolean); } + async getProductByPath(path: string): Promise> { + const query = sql.productByPath(path); + + const res = await this.knex.raw(query).then((data) => + data.rows.map((row) => { + const prod = this.createProductFromRow(row); + return prod; + }), + ); + return res.find(Boolean); + } + async getDesignerProducts(designerId: number): Promise> { const query = sql.designerProducts(); diff --git a/src/datasources/sql/products-sql.ts b/src/datasources/sql/products-sql.ts index c383acd..62e20ce 100644 --- a/src/datasources/sql/products-sql.ts +++ b/src/datasources/sql/products-sql.ts @@ -119,6 +119,15 @@ export function product(id: number) { ); } +export function productByPath(path: string) { + return ( + baseQuery + + /* sql */ ` + WHERE products.path = '${path}' +` + ); +} + export function categoryProducts(categoryId: number) { return ( baseQuery + diff --git a/src/resolvers/products-resolver.ts b/src/resolvers/products-resolver.ts index 2732304..38b7f2d 100644 --- a/src/resolvers/products-resolver.ts +++ b/src/resolvers/products-resolver.ts @@ -121,6 +121,14 @@ async function getProduct(_, { id }, { dataSources, auth }): Promise { return (dataSources.productApi).getProduct(id); } +async function getProductByPath( + _, + { path }, + { dataSources }, +): Promise { + return (dataSources.productApi).getProductByPath(path); +} + export const productTypeDefs = { ProductBlacklist, Product, @@ -130,6 +138,7 @@ export const productTypeDefs = { export const productQueryTypeDefs = { products: getProductsResult, product: getProduct, + productByPath: getProductByPath, productsSearch: getProductsSearchResult, }; diff --git a/src/schema.graphql b/src/schema.graphql index 0ad4b0c..ecd3510 100644 --- a/src/schema.graphql +++ b/src/schema.graphql @@ -25,6 +25,7 @@ type Query { filter: ProductsFilterInput ): ProductsResult product(id: Int!): Product + productByPath(path: String!): Product productsSearch(q: String!): ProductsSearchResult categories: [Category] category(id: Int!): Category