From 0b09152de4ddf7aa2f9f329d68b6e3ab5f957653 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:51:51 -0500 Subject: [PATCH] more detail into models and services --- models/CartItem.js | 0 models/CartModel.js | 32 +++++++++++++++++++++++++++++--- models/CartProduct.js | 17 +++++++++++++++++ models/OrderItem.js | 0 models/OrderProduct.js | 11 +++++++++++ models/ProductModel.js | 23 ++++++++++++++++++++--- services/CartService.js | 10 ++++++++++ services/ProductService.js | 25 +++++++++++++++++++++++++ 8 files changed, 112 insertions(+), 6 deletions(-) delete mode 100644 models/CartItem.js create mode 100644 models/CartProduct.js delete mode 100644 models/OrderItem.js create mode 100644 models/OrderProduct.js diff --git a/models/CartItem.js b/models/CartItem.js deleted file mode 100644 index e69de29..0000000 diff --git a/models/CartModel.js b/models/CartModel.js index 0a10abe..2d99922 100644 --- a/models/CartModel.js +++ b/models/CartModel.js @@ -1,13 +1,39 @@ +const db = require('../db/Pool'); +const pgp = require('pg-promise')({ capSQL: true }); + module.exports = class CartModel { async create(userid) { - + try { + const statement = pgp.helpers.insert(userid, null, 'carts') + 'RETURNING *'; + const result = await db.query(statement); + if (result.rows.length) return result.rows[0]; + return null; + } catch(e) { + throw new Error(e); + } } async findOneByUserId(userid) { - + try { + const statement = `SELECT * FROM carts WHERE userid = $1`; + const filter = [userid]; + const result = await db.query(statement, filter); + if (result.rows.length) return result.rows[0]; + return null; + } catch(e) { + throw new Error(e); + } } async findOneByCartId(cartid) { - + try { + const statement = `SELECT * FROM carts WHERE id = $1`; + const filter = [cartid]; + const result = await db.query(statement, filter); + if (result.rows.length) return result.rows[0]; + return null; + } catch(e) { + throw new Error(e); + } } } \ No newline at end of file diff --git a/models/CartProduct.js b/models/CartProduct.js new file mode 100644 index 0000000..bd255ee --- /dev/null +++ b/models/CartProduct.js @@ -0,0 +1,17 @@ +module.exports = class CartProductModel { + async insert(data) { + + } + + async update(data) { + + } + + async find(cartid) { + + } + + async delete(productid) { + + } +} \ No newline at end of file diff --git a/models/OrderItem.js b/models/OrderItem.js deleted file mode 100644 index e69de29..0000000 diff --git a/models/OrderProduct.js b/models/OrderProduct.js new file mode 100644 index 0000000..de3372b --- /dev/null +++ b/models/OrderProduct.js @@ -0,0 +1,11 @@ +module.exports = class OrderProductModel { + async create(data) { + + } + + async find(orderid) { + + } + + +} \ No newline at end of file diff --git a/models/ProductModel.js b/models/ProductModel.js index de6d658..c616430 100644 --- a/models/ProductModel.js +++ b/models/ProductModel.js @@ -1,9 +1,26 @@ -module.exports = class ProductModel { - async find() { +const db = require('../db/Pool'); +module.exports = class ProductModel { + async selectAll() { + try { + const q = "SELECT * FROM product;"; + const result = await db.query(q); + if (result.rows.length) return result.rows; + return []; + } catch(e) { + throw new Error(e); + } } async findOne(productid) { - + try { + const q = `SELECT * FROM product WHERE id = $1;`; + const filter = [productid]; + const result = await db.query(q, filter); + if (result.rows.length) return result.rows[0]; + return null; + } catch(e) { + throw new Error(e); + } } } \ No newline at end of file diff --git a/services/CartService.js b/services/CartService.js index e69de29..84b33be 100644 --- a/services/CartService.js +++ b/services/CartService.js @@ -0,0 +1,10 @@ +const createError = require('http-errors'); +const CartModel = require('../models/CartModel'); +const CartInstance = new CartModel(); + +module.exports = class CartService { + async create(userid) { + const result = await CartInstance.create(userid); + if (!result) throw createError(); + } +} \ No newline at end of file diff --git a/services/ProductService.js b/services/ProductService.js index e69de29..7b6b3d9 100644 --- a/services/ProductService.js +++ b/services/ProductService.js @@ -0,0 +1,25 @@ +const createError = require('http-errors'); +const ProductModel = require('../models/ProductModel'); +const ProductInstance = new ProductModel(); + +module.exports = class ProductService { + async getAll() { + try { + const result = await ProductInstance.selectAll(); + if (!result) throw createError(404, 'No products found.'); + return result; + } catch(e) { + throw new Error(e); + } + } + + async getOne(id) { + try { + const result = await ProductInstance.findOne(id); + if (!result) throw createError(404, 'No products found.'); + return result; + } catch(e) { + throw new Error(e); + } + } +} \ No newline at end of file