From fad0c3eb5745fbb253995bd649a4ad860bfff163 Mon Sep 17 00:00:00 2001 From: la3679 Date: Wed, 17 Apr 2024 21:05:22 -0400 Subject: [PATCH] updated the user fav api and import statemets in the files to resolve the issues --- PCP/server/src/api/categories_api.py | 20 ++++----- PCP/server/src/api/login_api.py | 22 +++++----- PCP/server/src/api/logout_api.py | 20 ++++----- PCP/server/src/api/prices_api.py | 19 ++++---- PCP/server/src/api/products_api.py | 19 ++++---- PCP/server/src/api/retailer_api.py | 19 ++++---- PCP/server/src/api/signup_api.py | 15 +++---- PCP/server/src/api/user_detail_api.py | 21 ++++----- PCP/server/src/api/user_favorites_api.py | 55 +++++++++++++++++++----- PCP/server/src/db/categories.py | 18 +++----- PCP/server/src/db/login.py | 19 +++----- PCP/server/src/db/logout.py | 23 +++------- PCP/server/src/db/prices.py | 14 ++---- PCP/server/src/db/products.py | 15 ++----- PCP/server/src/db/retailers.py | 14 ++---- PCP/server/src/db/signup.py | 18 +++----- PCP/server/src/db/user_details.py | 19 ++------ PCP/server/src/db/user_favorites.py | 14 +++--- PCP/server/src/model/amazon.py | 17 ++++---- PCP/server/src/model/user.py | 7 +-- PCP/server/src/server.py | 48 +++++++++++---------- 21 files changed, 194 insertions(+), 242 deletions(-) diff --git a/PCP/server/src/api/categories_api.py b/PCP/server/src/api/categories_api.py index b6d1035..7ece1f2 100644 --- a/PCP/server/src/api/categories_api.py +++ b/PCP/server/src/api/categories_api.py @@ -1,16 +1,14 @@ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response, request +from flask_restful import Api, Resource +# Import only necessary functions from the database utility and category modules try: - from src.utilities.swen_344_db_utils import * - from src.db.categories import * -except: - from utilities.swen_344_db_utils import * - from db.categories import * + from src.utilities.swen_344_db_utils import exec_get_all, exec_get_one + from src.db.categories import get_all_categories, get_category_by_id, search_categories +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_get_one + from db.categories import get_all_categories, get_category_by_id, search_categories + class ProductCategories(Resource): def get(self): diff --git a/PCP/server/src/api/login_api.py b/PCP/server/src/api/login_api.py index 8244710..1311cf2 100644 --- a/PCP/server/src/api/login_api.py +++ b/PCP/server/src/api/login_api.py @@ -3,19 +3,17 @@ These endpoints handle user registration and login functionality. """ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json -import hashlib # Importing hashlib module for password hashing +from flask import Flask, jsonify, make_response +from flask_restful import Api, Resource, reqparse +import hashlib # Used for password hashing + +# Try to import the necessary functions and classes explicitly try: - from src.utilities.swen_344_db_utils import * - from src.db.login import * -except: - from db.login import * - from utilities.swen_344_db_utils import * + from src.utilities.swen_344_db_utils import exec_get_all # Assuming this function is used within check_user_credentials + from src.db.login import check_user_credentials # Ensure this is the correct function used for login logic +except ImportError: + from utilities.swen_344_db_utils import exec_get_all + from db.login import check_user_credentials class LoginAPI(Resource): """ diff --git a/PCP/server/src/api/logout_api.py b/PCP/server/src/api/logout_api.py index 069b354..ad5d77e 100644 --- a/PCP/server/src/api/logout_api.py +++ b/PCP/server/src/api/logout_api.py @@ -3,18 +3,16 @@ These endpoints handle user registration and login functionality. """ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response, request +from flask_restful import Api, Resource, reqparse + +# Import only the necessary functions from utilities and logout db module try: - from src.utilities.swen_344_db_utils import * - from src.db.logout import * -except: - from utilities.swen_344_db_utils import * - from db.logout import * + from src.utilities.swen_344_db_utils import exec_commit + from src.db.logout import user_logout # Assuming user_logout function handles the logout process +except ImportError: + from utilities.swen_344_db_utils import exec_commit + from db.logout import user_logout class LogoutAPI(Resource): diff --git a/PCP/server/src/api/prices_api.py b/PCP/server/src/api/prices_api.py index 1ed0bb2..bc0016e 100644 --- a/PCP/server/src/api/prices_api.py +++ b/PCP/server/src/api/prices_api.py @@ -1,16 +1,13 @@ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response +from flask_restful import Api, Resource, reqparse +# Import only necessary functions from the utilities and price database module try: - from src.utilities.swen_344_db_utils import * - from src.db.prices import * -except: - from utilities.swen_344_db_utils import * - from db.prices import * + from src.utilities.swen_344_db_utils import exec_get_all + from src.db.prices import get_prices_by_product, get_all_prices +except ImportError: + from utilities.swen_344_db_utils import exec_get_all + from db.prices import get_prices_by_product, get_all_prices class PricesByProduct(Resource): diff --git a/PCP/server/src/api/products_api.py b/PCP/server/src/api/products_api.py index 20ab55a..d69b355 100644 --- a/PCP/server/src/api/products_api.py +++ b/PCP/server/src/api/products_api.py @@ -1,16 +1,13 @@ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response, request +from flask_restful import Api, Resource +# Import only the necessary functions from the utilities and products database module try: - from src.utilities.swen_344_db_utils import * - from src.db.products import get_all_products,get_product_by_id,search_products -except: - from utilities.swen_344_db_utils import * - from db.products import get_all_products,get_product_by_id,search_products + from src.utilities.swen_344_db_utils import exec_get_all # Assuming exec_get_all is used within your product functions + from src.db.products import get_all_products, get_product_by_id, search_products +except ImportError: + from utilities.swen_344_db_utils import exec_get_all + from db.products import get_all_products, get_product_by_id, search_products class Products(Resource): def get(self): diff --git a/PCP/server/src/api/retailer_api.py b/PCP/server/src/api/retailer_api.py index a59e21c..32646da 100644 --- a/PCP/server/src/api/retailer_api.py +++ b/PCP/server/src/api/retailer_api.py @@ -1,16 +1,13 @@ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response +from flask_restful import Api, Resource, request +# Import only the necessary functions from the utilities and retailer database module try: - from src.utilities.swen_344_db_utils import * - from src.db.retailers import * -except: - from utilities.swen_344_db_utils import * - from db.retailers import * + from src.utilities.swen_344_db_utils import exec_get_all # Assuming exec_get_all is used within retailer functions + from src.db.retailers import get_all_retailers, get_retailer_by_id +except ImportError: + from utilities.swen_344_db_utils import exec_get_all + from db.retailers import get_all_retailers, get_retailer_by_id class Retailers(Resource): diff --git a/PCP/server/src/api/signup_api.py b/PCP/server/src/api/signup_api.py index b658d60..644404d 100644 --- a/PCP/server/src/api/signup_api.py +++ b/PCP/server/src/api/signup_api.py @@ -1,14 +1,11 @@ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json +from flask import Flask, jsonify, make_response +from flask_restful import Api, Resource, reqparse +# Import only the necessary functions from the signup module try: - from src.db.signup import * -except: - from db.signup import * + from src.db.signup import user_signup, list_info_items +except ImportError: + from db.signup import user_signup, list_info_items class SignUpApi(Resource): def get(self): diff --git a/PCP/server/src/api/user_detail_api.py b/PCP/server/src/api/user_detail_api.py index 03ae874..87c710f 100644 --- a/PCP/server/src/api/user_detail_api.py +++ b/PCP/server/src/api/user_detail_api.py @@ -3,19 +3,16 @@ These endpoints handle user registration and login functionality. """ -from flask import make_response -from flask_restful import Resource -from flask import jsonify -from flask_restful import request -from flask_restful import reqparse -import json -import hashlib # Importing hashlib module for passwo +from flask import Flask, jsonify, make_response, request +from flask_restful import Api, Resource + +# Import only necessary functions from the utilities and user_details database module try: - from src.utilities.swen_344_db_utils import * - from src.db.user_details import * -except: - from utilities.swen_344_db_utils import * - from db.user_details import * + from src.utilities.swen_344_db_utils import exec_get_one + from src.db.user_details import verify_session_key, list_user_detail +except ImportError: + from utilities.swen_344_db_utils import exec_get_one + from db.user_details import verify_session_key, list_user_detail class UserDetail(Resource): def get(self): diff --git a/PCP/server/src/api/user_favorites_api.py b/PCP/server/src/api/user_favorites_api.py index 9ace963..41872cc 100644 --- a/PCP/server/src/api/user_favorites_api.py +++ b/PCP/server/src/api/user_favorites_api.py @@ -3,26 +3,59 @@ from flask import jsonify from flask_restful import request from flask_restful import reqparse -import json try: - from src.utilities.swen_344_db_utils import * - from src.db.user_favorites import * -except: - from utilities.swen_344_db_utils import * - from db.user_favorites import * + from src.utilities.swen_344_db_utils import exec_get_all + from src.db.user_favorites import add_user_favorite, get_user_favorites,delete_user_favorite +except ImportError: + from utilities.swen_344_db_utils import exec_get_all + from db.user_favorites import add_user_favorite, get_user_favorites,delete_user_favorite +def verify_session_key(session_key): + """Check the session key and return the user ID if valid.""" + query = "SELECT user_id FROM user_authentication WHERE session_key = %s;" + result = exec_get_all(query, (session_key,)) + return result[0][0] if result else None + class UserFavorites(Resource): def post(self): + session_key = request.headers.get('X-Session-Key') + if not session_key: + return {"message": "No session key provided."}, 401 + + user_id = verify_session_key(session_key) + if not user_id: + return {"message": "Invalid session key."}, 401 + parser = reqparse.RequestParser() - parser.add_argument('user_id', type=int, required=True, help="User ID cannot be blank!") parser.add_argument('product_id', type=int, required=True, help="Product ID cannot be blank!") args = parser.parse_args() - add_user_favorite(args['user_id'], args['product_id']) + + add_user_favorite(user_id, args['product_id']) return make_response(jsonify({'message': 'Favorite product added successfully'}), 201) - + class UserFavoritesById(Resource): - def get(self, user_id): + def get(self): + session_key = request.headers.get('X-Session-Key') + if not session_key: + return {"message": "No session key provided."}, 401 + + user_id = verify_session_key(session_key) + if not user_id: + return {"message": "Invalid session key."}, 401 + favorites = get_user_favorites(user_id) - return jsonify([{'FavoriteID': fav[4], 'ProductID': fav[0], 'ProductName': fav[1], 'ProductDescription': fav[2], 'ImageURL': fav[3]} for fav in favorites]) \ No newline at end of file + return jsonify([{'FavoriteID': fav[4], 'ProductID': fav[0], 'ProductName': fav[1], 'ProductDescription': fav[2], 'ImageURL': fav[3]} for fav in favorites]) + + def delete(self, product_id): + session_key = request.headers.get('X-Session-Key') + if not session_key: + return {"message": "No session key provided."}, 401 + + user_id = verify_session_key(session_key) + if not user_id: + return {"message": "Invalid session key."}, 401 + + delete_user_favorite(user_id, product_id) + return make_response(jsonify({'message': 'Favorite product deleted successfully'}), 204) \ No newline at end of file diff --git a/PCP/server/src/db/categories.py b/PCP/server/src/db/categories.py index 96a15ce..00d11b6 100644 --- a/PCP/server/src/db/categories.py +++ b/PCP/server/src/db/categories.py @@ -1,16 +1,12 @@ -import psycopg2 -import yaml +import os +from psycopg2 import connect import pandas as pd -import numpy as np -import sys -import os + +# Import only necessary functions from your utility module try: - from src.api.categories_api import * - from src.utilities.swen_344_db_utils import * -except: - from api.categories_api import * - from utilities.swen_344_db_utils import * - + from src.utilities.swen_344_db_utils import exec_get_all, exec_get_one +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_get_one def get_all_categories(): """Fetches all records from the produtcategories table.""" diff --git a/PCP/server/src/db/login.py b/PCP/server/src/db/login.py index 4d5cced..246e89f 100644 --- a/PCP/server/src/db/login.py +++ b/PCP/server/src/db/login.py @@ -1,20 +1,11 @@ -import psycopg2 -import yaml import os import pandas as pd -import numpy as np -import sys -import os -try: - from src.api.login_api import * - from src.utilities.swen_344_db_utils import * - from src.model.user import * -except: - from api.login_api import * - from utilities.swen_344_db_utils import * - from model.user import * - +from psycopg2 import connect # Import psycopg2 if you need it for database operations, otherwise remove it +try: + from src.utilities.swen_344_db_utils import exec_get_all, exec_get_one, exec_commit +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_get_one, exec_commit def list_info_items(): """Fetches all records from the User table.""" diff --git a/PCP/server/src/db/logout.py b/PCP/server/src/db/logout.py index 2055cd3..7487d1c 100644 --- a/PCP/server/src/db/logout.py +++ b/PCP/server/src/db/logout.py @@ -1,20 +1,11 @@ -import psycopg2 -import yaml -import os -import pandas as pd -import numpy as np -import sys -import os +import secrets # Include only if you're generating new session keys or similar +from psycopg2 import connect # Include this only if you're directly using psycopg2 for connections in other parts of your script + +# Import only necessary functions from your utilities and models try: - from src.api.logout_api import * - from src.utilities.swen_344_db_utils import * - from src.model.user import * -except: - from api.logout_api import * - from utilities.swen_344_db_utils import * - from model.user import * -import hashlib -import secrets + from src.utilities.swen_344_db_utils import exec_commit +except ImportError: + from utilities.swen_344_db_utils import exec_commit def user_logout(kwargs): session_key = kwargs.get('session_key') diff --git a/PCP/server/src/db/prices.py b/PCP/server/src/db/prices.py index 6e16d18..cab7190 100644 --- a/PCP/server/src/db/prices.py +++ b/PCP/server/src/db/prices.py @@ -1,15 +1,7 @@ -import psycopg2 -import yaml -import pandas as pd -import numpy as np -import sys -import os try: - from src.api.prices_api import * - from src.utilities.swen_344_db_utils import * -except: - from api.prices_api import * - from utilities.swen_344_db_utils import * + from src.utilities.swen_344_db_utils import exec_get_all +except ImportError: + from utilities.swen_344_db_utils import exec_get_all def get_prices_by_product(product_id): sql = """ diff --git a/PCP/server/src/db/products.py b/PCP/server/src/db/products.py index a560c6c..b0080ce 100644 --- a/PCP/server/src/db/products.py +++ b/PCP/server/src/db/products.py @@ -1,16 +1,7 @@ -import psycopg2 -import yaml -import pandas as pd -import numpy as np -import sys -import os try: - # from src.api.products_api import * - from src.utilities.swen_344_db_utils import * -except: - # from api.products_api import * - from utilities.swen_344_db_utils import * - + from src.utilities.swen_344_db_utils import exec_get_all, exec_get_one +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_get_one def get_all_products(): """Fetches all records from the Products table.""" diff --git a/PCP/server/src/db/retailers.py b/PCP/server/src/db/retailers.py index f4002b2..c5f19ff 100644 --- a/PCP/server/src/db/retailers.py +++ b/PCP/server/src/db/retailers.py @@ -1,15 +1,7 @@ -import psycopg2 -import yaml -import pandas as pd -import numpy as np -import sys -import os try: - from src.api.retailer_api import * - from src.utilities.swen_344_db_utils import * -except: - from api.retailer_api import * - from utilities.swen_344_db_utils import * + from src.utilities.swen_344_db_utils import exec_get_all, exec_get_one +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_get_one def get_all_retailers(): diff --git a/PCP/server/src/db/signup.py b/PCP/server/src/db/signup.py index dd0fb78..dd071dd 100644 --- a/PCP/server/src/db/signup.py +++ b/PCP/server/src/db/signup.py @@ -1,18 +1,10 @@ -import psycopg2 -import yaml -import os -import pandas as pd -import numpy as np -import sys -import os -try: - from src.api.signup_api import * - from src.utilities.swen_344_db_utils import * -except: - from api.signup_api import * - from utilities.swen_344_db_utils import * +# Import only necessary modules and functions import hashlib import secrets +try: + from src.utilities.swen_344_db_utils import exec_get_all, exec_commit +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_commit diff --git a/PCP/server/src/db/user_details.py b/PCP/server/src/db/user_details.py index 6e7317e..4fd974b 100644 --- a/PCP/server/src/db/user_details.py +++ b/PCP/server/src/db/user_details.py @@ -1,20 +1,9 @@ -import psycopg2 -import yaml -import os -import pandas as pd -import numpy as np -import sys -import os -try: - from src.api.user_detail_api import * - from src.utilities.swen_344_db_utils import * - from src.model.user import * -except: - from api.user_detail_api import * - from utilities.swen_344_db_utils import * - from model.user import * import hashlib import secrets +try: + from src.utilities.swen_344_db_utils import exec_get_all +except ImportError: + from utilities.swen_344_db_utils import exec_get_all def list_user_detail(username): diff --git a/PCP/server/src/db/user_favorites.py b/PCP/server/src/db/user_favorites.py index ea945f7..c9fd904 100644 --- a/PCP/server/src/db/user_favorites.py +++ b/PCP/server/src/db/user_favorites.py @@ -5,11 +5,9 @@ import sys import os try: - from src.api.user_favorites_api import * - from src.utilities.swen_344_db_utils import * -except: - from api.user_favorites_api import * - from utilities.swen_344_db_utils import * + from src.utilities.swen_344_db_utils import exec_get_all, exec_commit +except ImportError: + from utilities.swen_344_db_utils import exec_get_all, exec_commit def get_user_favorites(user_id): @@ -26,3 +24,9 @@ def add_user_favorite(user_id, product_id): """Adds a new favorite product for a user.""" sql = "INSERT INTO UserFavorites (user_id, ProductID) VALUES (%s, %s);" exec_commit(sql, (user_id, product_id)) + + +def delete_user_favorite(user_id, product_id): + """Deletes a favorite product for a user.""" + sql = "DELETE FROM UserFavorites WHERE user_id = %s AND ProductID = %s;" + exec_commit(sql, (user_id, product_id)) \ No newline at end of file diff --git a/PCP/server/src/model/amazon.py b/PCP/server/src/model/amazon.py index acafa1b..4f541aa 100644 --- a/PCP/server/src/model/amazon.py +++ b/PCP/server/src/model/amazon.py @@ -1,13 +1,12 @@ +import os +import pandas as pd +import psycopg2 +from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + try: - import pandas as pd - import psycopg2 - from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT - from src.utilities.swen_344_db_utils import * -except: - from utilities.swen_344_db_utils import * - import pandas as pd - import psycopg2 - from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + from src.utilities.swen_344_db_utils import exec_commit, exec_get_one +except ImportError: + from utilities.swen_344_db_utils import exec_commit, exec_get_one def insert_data_from_excel(): # Load the data from Excel diff --git a/PCP/server/src/model/user.py b/PCP/server/src/model/user.py index 4ef2006..0b2638a 100644 --- a/PCP/server/src/model/user.py +++ b/PCP/server/src/model/user.py @@ -1,7 +1,8 @@ try: - from src.db.login import * -except: - from db.login import * + from src.db.login import check_username_exists, validate_credentials # Assuming these are the functions you use from login +except ImportError: + from db.login import check_username_exists, validate_credentials + import secrets def check_username_and_password(result_username, result_credentials,session_key): if result_credentials: diff --git a/PCP/server/src/server.py b/PCP/server/src/server.py index c4fad25..0ee53d5 100644 --- a/PCP/server/src/server.py +++ b/PCP/server/src/server.py @@ -3,29 +3,31 @@ from flask_cors import CORS try: - from utilities.swen_344_db_utils import * - from api.login_api import * - from api.signup_api import * - from api.user_detail_api import * - from api.logout_api import * - from model.amazon import * - from api.categories_api import * - from api.products_api import * - from api.retailer_api import * - from api.prices_api import * - from api.user_favorites_api import * -except: - from .utilities.swen_344_db_utils import * - from .api.login_api import * - from .api.signup_api import * - from .api.user_detail_api import * - from .api.logout_api import * - from .model.amazon import * - from .api.categories_api import * - from .api.products_api import * - from .api.retailer_api import * - from .api.prices_api import * - from .api.user_favorites_api import * + # Import only necessary functions and classes + from utilities.swen_344_db_utils import exec_sql_file + from api.login_api import LoginAPI + from api.signup_api import SignUpApi + from api.user_detail_api import UserDetail + from api.logout_api import LogoutAPI + from api.categories_api import ProductCategories, CategoryById, CategorySearch + from api.products_api import Products, ProductById, ProductSearch + from api.retailer_api import Retailers, RetailerById + from api.prices_api import Prices, PricesByProduct + from api.user_favorites_api import UserFavorites, UserFavoritesById + from model.amazon import insert_data_from_excel # Assuming this is the correct function name for handling data insertions from the model +except ImportError: + # For relative imports within a package structure + from .utilities.swen_344_db_utils import exec_sql_file + from .api.login_api import LoginAPI + from .api.signup_api import SignUpApi + from .api.user_detail_api import UserDetail + from .api.logout_api import LogoutAPI + from .api.categories_api import ProductCategories, CategoryById, CategorySearch + from .api.products_api import Products, ProductById, ProductSearch + from .api.retailer_api import Retailers, RetailerById + from .api.prices_api import Prices, PricesByProduct + from .api.user_favorites_api import UserFavorites, UserFavoritesById + from .model.amazon import insert_data_from_excel app = Flask(__name__) # create Flask instance CORS(app) # Enable CORS on Flask server to work with Nodejs pages