From 5a44b65bf31ecea6465f843729c8878ca9675538 Mon Sep 17 00:00:00 2001 From: BBaoVanC Date: Fri, 2 Oct 2020 22:16:01 -0500 Subject: [PATCH] 2020-10-02 night --- webapi.py | 247 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 179 insertions(+), 68 deletions(-) diff --git a/webapi.py b/webapi.py index 765d657..99b46a3 100644 --- a/webapi.py +++ b/webapi.py @@ -53,9 +53,13 @@ def close_conn(e): def get_locations(): db = get_db() with db.cursor() as cur: - cur.execute("SELECT name,description FROM location") - data = cur.fetchall() - print(data) + cur.execute("SELECT name,description FROM location") + data = cur.fetchall() + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + print("ran SELECT name,description FROM location") data2 = {} for row in data: data2[row[0]] = {} @@ -63,92 +67,199 @@ def get_locations(): # data2 = [] # for row in data: # data2.append({'name': row[0], 'description': row[1]}) + print("processed data:") print(data2) return jsonify(data2) -@app.route("/api/v1/location//current_quantities", methods = ["GET"]) +@app.route("/api/v1/location/name/", methods = ["GET"]) +def api_get_location_information(search): + db = get_db() + with db.cursor() as cur: + cur.execute("SELECT name,description FROM location WHERE name = %s", (search,)) + data = cur.fetchall() + print("ran SELECT name,description FROM location WHERE name = %s") + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + data2 = {} + row = data[0] + data2['name'] = row[0] + data2['description'] = row[1] + print("processed data:") + print(data2) + return jsonify(data2) + + +@app.route("/api/v1/location//quantities", methods = ["GET"]) def api_get_current_quantities(location): db = get_db() with db.cursor() as cur: cur.execute("SELECT product_upc,quantity FROM product_quantity WHERE location = %s", (location,)) data = cur.fetchall() - print(data) + print("ran SELECT product_upc,quantity FROM product_quantity WHERE location = %s") if len(data) <= 0: + print("no results returned, sending 404") return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND else: data2 = {} for row in data: data2[row[0]] = row[1] - return jsonify(data2) - - -@app.route("/api/v1/location//current_quantity/", methods = ["GET"]) -def api_get_quantity_of_product_in_location(location, upc): - db = get_db() - with db.cursor() as cur: - cur.execute("SELECT quantity FROM product_quantity WHERE location = %s AND product_upc = %s", (location, upc)) - data = cur.fetchall() - if len(data) <= 0: - return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND - else: - return jsonify(data[0][0]) - - -@app.route("/api/v1/product/", methods = ["GET"]) -def api_get_product_information(product_upc): - db = get_db() - with db.cursor() as cur: - cur.execute("SELECT upc,brand,name,size,sizeunit,description FROM product WHERE upc = %s", (product_upc,)) - data = cur.fetchall() - if len(data) <= 0: - return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND - else: - row = data[0] - print(row) - - data2 = {} - data2['upc'] = row[0] - data2['brand'] = row[1] - data2['name'] = row[2] - data2['size'] = row[3] - data2['sizeunit'] = row[4] - data2['description'] = row[5] - + print("processed data:") print(data2) return jsonify(data2) -# @app.route("//api/v1/item//", methods = ["GET", "DELETE"]) -# def api_item_brand(location, item, brand): - # if request.method == "GET": - # try: - # itemresp = storage.get_items(location)[item.lower()][brand.lower()] - # print("Got {0} of brand {1} at {2}".format(item, brand, location)) - # return jsonify(itemresp) - # except KeyError: - # print("KeyError, returning 404") - # return jsonify({'status': 'error', 'error': 'NOT_FOUND'}), status.HTTP_404_NOT_FOUND - - # elif request.method == "DELETE": - # try: - # storage.rm_brand(location, item, brand) - # print("Deleted {0} of brand {1} at {2}".format(item, brand, location)) - # return jsonify({'status': 'success'}) - # except KeyError: - # print("KeyError, returning 404") - # return jsonify({'status': 'error', 'error': 'NOT_FOUND'}), status.HTTP_404_NOT_FOUND +@app.route("/api/v1/location//quantity//", methods = ["GET"]) +def api_get_quantity_of_product_in_location(location, searchmethod, search): + db = get_db() + with db.cursor() as cur: + methodmap = {'upc': 'product_upc', 'name': 'name'} + if searchmethod in methodmap.keys(): + method = methodmap[searchmethod] + cur.execute("SELECT quantity FROM product_quantity WHERE location = %s AND {0} = %s".format(method), (location, search)) + data = cur.fetchall() + print("ran SELECT quantity FROM product_quantity WHERE location = %s AND {0} = %s".format(method)) + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + data2 = data[0][0] + print("processed data:") + print(data2) + return jsonify(data2) + else: + print("invalid search method, sending 400") + return jsonify({'error': 'INVALID_SEARCH_METHOD'}), status.HTTP_400_BAD_REQUEST -# @app.route("//api/v1/item///", methods = ["DELETE"]) -# def api_rm_brand_field(location, item, brand, field): - # try: - # storage.rm_brand_field(location, item, brand, field) - # print("Deleted field {0} from brand {1} of item {2} at {3}".format(field, brand, item, location)) - # return jsonify({'status': 'success'}) - # except KeyError: - # print("KeyError, returning 404") - # return jsonify({'status': 'error', 'error': 'NOT_FOUND'}), status.HTTP_404_NOT_FOUND +@app.route("/api/v1/products", methods = ["GET"]) +def api_get_products(): + db = get_db() + with db.cursor() as cur: + cur.execute("SELECT upc,brand,name,size,sizeunit,description FROM product") + data = cur.fetchall() + print("ran SELECT upc,brand,name,size,sizeunit,description FROM product") + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + data2 = {} + for row in data: + data2[row[0]] = {'brand': row[1], 'name': row[2], 'size': row[3], 'sizeunit': row[4], 'description': row[5]} + print("processed data:") + print(data2) + return jsonify(data2) + +@app.route("/api/v1/product//", methods = ["GET"]) +def api_get_product_information(searchmethod, search): + db = get_db() + with db.cursor() as cur: + if searchmethod in ['name', 'upc']: + cur.execute("SELECT upc,brand,name,size,sizeunit,description FROM product WHERE {0} = %s".format(searchmethod), (search,)) + data = cur.fetchall() + print("ran SELECT upc,brand,name,size,sizeunit,description FROM product WHERE {0} = %s") + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + row = data[0] + + data2 = {} + data2['upc'] = row[0] + data2['brand'] = row[1] + data2['name'] = row[2] + data2['size'] = row[3] + data2['sizeunit'] = row[4] + data2['description'] = row[5] + + print("processed data:") + print(data2) + return jsonify(data2) + else: + print("invalid search method, sending 400") + return jsonify({'error': 'INVALID_SEARCH_METHOD'}), status.HTTP_400_BAD_REQUEST + + +@app.route("/api/v1/brands", methods = ["GET"]) +def api_list_brands(): + db = get_db() + with db.cursor() as cur: + cur.execute("SELECT name,description FROM brand") + data = cur.fetchall() + print("ran SELECT name,description FROM brand") + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + data2 = {} + for row in data: + data2[row[0]] = {'description': row[1]} + print("processed data:") + print(data2) + return jsonify(data2) + + +@app.route("/api/v1/brand/name/", methods = ["GET"]) +def api_get_brand_by_name(search): + db = get_db() + with db.cursor() as cur: + cur.execute("SELECT name,description FROM brand WHERE name = %s", (search,)) + data = cur.fetchall() + print("ran SELECT name,description FROM brand WHERE name = %s") + if len(data) <= 0: + print("no results returned, sending 404") + return jsonify({'error': 'NO_RESULTS_RETURNED'}), status.HTTP_404_NOT_FOUND + else: + data2 = {} + for row in data: + data2[row[0]] = {'description': row[1]} + print("processed data:") + print(data2) + return jsonify(data2) + + +@app.route("/api/v1/create_location", methods = ["POST"]) +def api_create_location(): + db = get_db() + with db.cursor() as cur: + if "name" not in request.form: + return jsonify({'error': 'NO_NAME_PROVIDED'}), status.HTTP_400_BAD_REQUEST + else: + locname = request.form['name'] + if "description" in request.form: + locdesc = request.form['description'] + else: + locdesc = None + + print(locname, locdesc) + cur.execute("INSERT INTO location (name, description) VALUES (%s, %s)", (locname, locdesc)) + print("ran INSERT INTO location (name, description) VALUES (%s, %s)") + db.commit() + print("committed changes to database") + return jsonify({'api_endpoint': '/api/v1/location/name/{0}'.format(locname)}) + + +@app.route("/api/v1/create_brand", methods = ["POST"]) +def api_create_brand(): + db = get_db() + with db.cursor() as cur: + if "name" not in request.form: + return jsonify({'error': 'NO_NAME_PROVIDED'}), status.HTTP_400_BAD_REQUEST + else: + locname = request.form['name'] + if "description" in request.form: + locdesc = request.form['description'] + else: + locdesc = None + + print(locname, locdesc) + cur.execute("INSERT INTO brand (name, description) VALUES (%s, %s)", (locname, locdesc)) + print("ran INSERT INTO brand (name, description) VALUES (%s, %s)") + db.commit() + print("committed changes to database") + return jsonify({'api_endpoint': '/api/v1/brand/name/{0}'.format(locname)}) # @app.route("//api/v1/item///new_brand", methods = ["POST"])