diff --git a/app/api/routes/product_routes.py b/app/api/routes/product_routes.py index 6daf2b3..753a0bc 100644 --- a/app/api/routes/product_routes.py +++ b/app/api/routes/product_routes.py @@ -5,58 +5,14 @@ from app.api import bp_product from app.services.product_service import ProductService @bp_product.route('/', methods=['GET']) -def all_product_info(id: int): - result = ProductService.get_all_info(id) +def get_product_info(id: int): + fields = ['name', 'price', 'image', 'image_name', 'seller'] - if result is not None: - return jsonify(result) - else: - abort(404) + fields_param = request.args.get('fields') + requested_fields = [] + + return abort(501) -@bp_product.route('//name', methods=['GET']) -def get_name(id: int): - result = ProductService.get_name(id) - - if result is not None: - return jsonify({"name": result}) - else: - return abort(404) - -@bp_product.route('//manufacturer', methods=['GET']) -def get_manufacturer(id: int): - result = ProductService.get_manufacturer(id) - - if result is not None: - return jsonify({"name": result}) - else: - return abort(404) - -@bp_product.route('//price', methods=['GET']) -def get_price(id: int): - result = ProductService.get_price(id) - - if result is not None: - return jsonify({"price": result}) - else: - return abort(404) - -@bp_product.route('//image', methods=['GET']) -def get_image(id: int): - result = ProductService.get_image(id) - - if result is not None: - return jsonify({"image": result}) - else: - return abort(404) - -@bp_product.route('//image_name', methods=['GET']) -def get_image_name(id: int): - result = ProductService.get_image_name(id) - - if result is not None: - return jsonify({"image_name": result}) - else: - return abort(404) @bp_product.route('/create', methods=['POST']) def create_product_listing(): diff --git a/app/services/product_service.py b/app/services/product_service.py index 8d73c2e..bf808d3 100644 --- a/app/services/product_service.py +++ b/app/services/product_service.py @@ -1,44 +1,70 @@ import base64 -from ..extensions import db_cursor as cursor +from flask import abort +from mysql.connector import Error + +from app.extensions import db_connection class ProductService: @staticmethod def get_name(product_id: int): - cursor.execute(f"select name from product where product.id = {product_id}") - result = cursor.fetchone() + db_cursor.execute(f"select name from product where product.id = {product_id}") + + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() return result['name'] @staticmethod def get_manufacturer(product_id: int): - cursor.execute(f"select user.displayname as seller from product inner join user on product.seller_id = user.id where product.id = {product_id}") - result = cursor.fetchone() + db_cursor.execute(f"select user.displayname as seller from product inner join user on product.seller_id = user.id where product.id = {product_id}") + + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() return result['seller'] @staticmethod def get_price(product_id: int): - cursor.execute(f"select price_pc from product where product.id = {product_id}") - result = cursor['price_pc'] - return result[0] + db_cursor.execute(f"select price_pc from product where product.id = {product_id}") + + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() + return result['price_pc'] @staticmethod def get_image(product_id: int): - cursor.execute(f"select image from product where product.id = {product_id}") - result = cursor['image'] - return base64.b64encode(result[0]).decode('utf-8') + db_cursor.execute(f"select image from product where product.id = {product_id}") + + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() + return base64.b64encode(result['image']).decode('utf-8') @staticmethod def get_image_name(product_id: int): - cursor.execute(f"select image_name from product where product.id = {product_id}") - result = cursor['image_name'] - return result[0] + db_cursor.execute(f"select image_name from product where product.id = {product_id}") + + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() + return result['image_name'] @staticmethod def get_all_info(product_id: int): - cursor.execute(f"select name, user.displayname as seller, price_pc, image_name, image from product inner join user on product.seller_id = user.id where product.id = {product_id}") - result = cursor.fetchone() + db_cursor.execute(f"select name, user.displayname as seller, price_pc, image_name, image from product inner join user on product.seller_id = user.id where product.id = {product_id}") + if db_cursor.rowcount != 1: + return abort(404) + + result = db_cursor.fetchone() return { "name": result['name'], "seller": result['seller'], @@ -48,5 +74,11 @@ class ProductService: } @staticmethod - def create_listing(): - print("asd") \ No newline at end of file + def create_listing(name: str, seller_id: str, price: float, image_name: str, image): + try: + db_cursor.execute("insert into product(seller_id, name, price_pc, image, image_name) values (%s, %s, %s, %s, %s)", (seller_id, name, price, image, image_name)) + db_connection.commit() + except Error as e: + return {"Failed": f"Failed to create product. {e}"}, 400 + + return {"Success", "Successfully created new product listing"}, 200 \ No newline at end of file