diff --git a/Product_MicroService_Group3/app.yaml b/Product_MicroService_Group3/app.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ab488dfb9077cfca361f84c8511c86b3ed935dbb --- /dev/null +++ b/Product_MicroService_Group3/app.yaml @@ -0,0 +1,2 @@ +runtime: python312 +entrypoint: gunicorn -b :$PORT index:app \ No newline at end of file diff --git a/Product_MicroService_Group3/app/__init__.py b/Product_MicroService_Group3/app/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e5da06c31592e6410ec992cae27f65004ade98d6 --- /dev/null +++ b/Product_MicroService_Group3/app/__init__.py @@ -0,0 +1,10 @@ +from flask import Flask + +from app.models import login + +app = Flask(__name__) + +from app import routes + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/Product_MicroService_Group3/app/__pycache__/config.cpython-311.pyc b/Product_MicroService_Group3/app/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5dbbfc7766e0722ceb9c91c99c512ea13f2f156 Binary files /dev/null and b/Product_MicroService_Group3/app/__pycache__/config.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/config.py b/Product_MicroService_Group3/app/config.py new file mode 100644 index 0000000000000000000000000000000000000000..c00614d76e76bd4f038472b1cffe8ef34b2415d7 --- /dev/null +++ b/Product_MicroService_Group3/app/config.py @@ -0,0 +1,7 @@ +import os + + +DEBUG = True +SECRET_KEY = "Group3" + +PORT = 5001 \ No newline at end of file diff --git a/Product_MicroService_Group3/app/controllers/__init__.py b/Product_MicroService_Group3/app/controllers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..83fe4b03fbf1ea1097fdec730685170c3a35cc8d --- /dev/null +++ b/Product_MicroService_Group3/app/controllers/__init__.py @@ -0,0 +1,3 @@ +from flask import Flask +from flask import Blueprint + diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/__init__.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a4bfd8103bb4380305718ed59e96e027557a8a4 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/__init__.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/addReviewController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/addReviewController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e51d65e2ae6279d43717f3f1f61d3ea671e160c Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/addReviewController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/changePasswordController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/changePasswordController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24490b5e77a15d00d5e34c42c5464eadaa725643 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/changePasswordController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/deleteProfileController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/deleteProfileController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f0bf9cd2f33585660325e6ee6fa5211a03cf5c3 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/deleteProfileController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/getProductController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/getProductController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..927290aca63a4c1d8b1ad3a1fa801dae5ce7413d Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/getProductController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/login.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/login.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee02eac64b23cc7222f821324eb85aa9d76b8dc0 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/login.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/loginController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/loginController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ae33a0fab843db2a609b147bf8a5d6eaea25f24 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/loginController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/logoutController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/logoutController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fef5e24b0dc447c671daa0656ba2d91c90e66b0a Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/logoutController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/productHomeController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/productHomeController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28e57e844880d4812c306d2a88329e736f9193a6 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/productHomeController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/signupController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/signupController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6315f975befa50cae416644dbce66638592358c Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/signupController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/__pycache__/updateProfileController.cpython-311.pyc b/Product_MicroService_Group3/app/controllers/__pycache__/updateProfileController.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99f644e6d21227d53f1b3576205412c1a32bf653 Binary files /dev/null and b/Product_MicroService_Group3/app/controllers/__pycache__/updateProfileController.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/controllers/addReviewController.py b/Product_MicroService_Group3/app/controllers/addReviewController.py new file mode 100644 index 0000000000000000000000000000000000000000..1a2b5d3518a69fe63d5c920051bdd94e6aa0455f --- /dev/null +++ b/Product_MicroService_Group3/app/controllers/addReviewController.py @@ -0,0 +1,98 @@ +from flask import Blueprint, jsonify, request, json, session +from models.addReview import add_user_review + +import requests + + +add_review_bp = Blueprint("addReview",__name__) + + +@add_review_bp.route("/product/<int:productID>/addReview", methods=["GET"]) +def get_username_from_user_microservice(productID): + + user_id = session.get("user_id") + + if user_id: + if request.method == 'GET': + + + product_id = productID + + response = requests.post('http://localhost:5000/user/getUsername', json={'id': user_id}) + if response.status_code == 200: + username = response.json()['username'] + userID = user_id + session['username'] = username + session['productID'] = product_id + + + rating_info = { + "UserID" : userID, + "ProductID" : product_id, + "Username" : username + } + + return rating_info + else: + return {"Error" : "Failed to retrieve username"} + + #return "You can review the product with ID: {}".format(product_id) + + else: + return {"error" : "null"} + + else: + return {"error" : "You need to be logged in to add a review"} + + + + +@add_review_bp.route("/product/<int:productID>/addReview", methods=["POST"]) +def add_review(productID): + + user_id = session.get("user_id") + + if user_id: + if request.method == 'POST': + + data = request.get_json() + review = data.get("review") + rating = data.get("rating") + product_id = productID + username = session.get('username') + product_id = session.get('productID') + + if review.strip() != "": + + if username is None: + return {"error": "Username is not available"} + + # Check if product_id is available + if product_id is None: + return {"error": "Product ID is not available"} + + if isinstance(rating, int) and 1 <= rating <= 5: + + review_info = { + "UserID" : user_id, + "ProductID" : product_id, + "Review" : review, + "Rating" : rating, + "Username" : username + } + + user_review_message = add_user_review(review_info) + return user_review_message + + else: + return {"error" : "Rating must be an integer between 1 and 5"} + + else: + return {"error" : "Review cannot be empty"} + + + else: + return {"error" : "null"} + + else: + return {"error" : "You need to be logged in to add a review"} \ No newline at end of file diff --git a/Product_MicroService_Group3/app/controllers/getProductController.py b/Product_MicroService_Group3/app/controllers/getProductController.py new file mode 100644 index 0000000000000000000000000000000000000000..88c9f2c6a960befdd847ab73ef534d0bc63b3582 --- /dev/null +++ b/Product_MicroService_Group3/app/controllers/getProductController.py @@ -0,0 +1,30 @@ +from flask import Blueprint, jsonify, request, json, session +from models.getProduct import get_product + + +display_product_bp = Blueprint("product",__name__) + + +@display_product_bp.route("/product/<int:productID>", methods=["GET"]) +def display_product(productID): + + user_id = session.get("user_id") + + + if request.method == 'GET': + + + product_id = productID + + + # Convert to JSON + #json_user_data = json.dumps(user_data) + + product, images, reviews = get_product(product_id) #Send user info to database + customers = [review_data["CustomerID"] for review_data in reviews] + + + return jsonify(customers,{"product" : product, "images" : images, "reviews" : reviews, "session" : user_id}) + + else: + return {"error" : "null"} \ No newline at end of file diff --git a/Product_MicroService_Group3/app/controllers/productHomeController.py b/Product_MicroService_Group3/app/controllers/productHomeController.py new file mode 100644 index 0000000000000000000000000000000000000000..4acfaf5e5c3babe95574864bb08424664a0ca925 --- /dev/null +++ b/Product_MicroService_Group3/app/controllers/productHomeController.py @@ -0,0 +1,30 @@ +from flask import Blueprint, jsonify, request, json, session +from models.productHome import get_product_by_section + + +product_home_bp = Blueprint("home",__name__) + + +@product_home_bp.route("/product/home", methods=["POST"]) +def product_section(): + + user_id = session.get("user_id") + + + if request.method == 'POST': + + data = request.get_json() + category_id = data.get("category_id") + + + # Convert to JSON + #json_user_data = json.dumps(user_data) + + products = get_product_by_section(category_id) #Send user info to database + #customers = [review_data["CustomerID"] for review_data in reviews] + + + return jsonify({"products" : products, "session" : user_id}) + + else: + return {"error" : "null"} \ No newline at end of file diff --git a/Product_MicroService_Group3/app/index.py b/Product_MicroService_Group3/app/index.py new file mode 100644 index 0000000000000000000000000000000000000000..9f0267b580f95986bae3f617d8c23bbf4ddf994f --- /dev/null +++ b/Product_MicroService_Group3/app/index.py @@ -0,0 +1,50 @@ +from flask import Flask, redirect, url_for, request, render_template, make_response, session, abort +from flask_cors import CORS +from flask import jsonify + + +from config import DEBUG, SECRET_KEY, PORT +import os +import requests + +from controllers.getProductController import display_product_bp +from controllers.addReviewController import add_review_bp +from controllers.productHomeController import product_home_bp + + + + +app = Flask(__name__) +CORS(app) + + +app.secret_key = SECRET_KEY + + +# Read user microservice URL from environment variable +USER_MICROSERVICE_URL = os.getenv('USER_MICROSERVICE_URL', 'http://127.0.0.1:5000') + +@app.route('/product', methods=['POST']) +def get_session_id(): + session_id = session.get('user_id') + if session_id: + return jsonify({'session_id': session_id}) + else: + return jsonify({'message': 'Session ID not found'}) + + + +@app.route('/') +def index(): + return render_template("index.html") + + + +app.register_blueprint(display_product_bp) +app.register_blueprint(add_review_bp) +app.register_blueprint(product_home_bp) + + + +if __name__ == '__main__': + app.run(debug=DEBUG, port=PORT) \ No newline at end of file diff --git a/Product_MicroService_Group3/app/models/__init__.py b/Product_MicroService_Group3/app/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d55ce4a0c8e0748e87cd3ecae1b6fe12294bdae3 --- /dev/null +++ b/Product_MicroService_Group3/app/models/__init__.py @@ -0,0 +1,15 @@ +from flask import Flask +from flask_cors import CORS + + +#from app.models import models + +app = Flask(__name__) +CORS(app) + +#db = sqlAlchemy + +#from app import routes + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/Product_MicroService_Group3/app/models/__pycache__/__init__.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfb0366dfbe4ee46a4cd5603bac50bd5dcb0efcf Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/__init__.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/addReview.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/addReview.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e72c77e0f1e3ecc5183d5731a8b0a948337a6a9 Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/addReview.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/changePassword.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/changePassword.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e2f696425d98b4acece898d09560e3b644ec81a Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/changePassword.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/database_connection.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/database_connection.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..005839d68435047d092e0b3a8b7c4d965cb7ff3d Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/database_connection.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/deleteProfile.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/deleteProfile.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11cd5e31a86ac49992cc243db920bc089e02298a Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/deleteProfile.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/getProduct.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/getProduct.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9147d61c3c536e412c3a60130eaf89b7d9581a8 Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/getProduct.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/login.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/login.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54f0eb17fc5e099f4eaf6dcc17f1775c07a610e1 Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/login.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/models.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c5497a917a5f33bfe0edde28b561ef47b6a7caf Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/models.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/productHome.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/productHome.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..491496f7b159eb7864c8ba8eaaddc449f296add3 Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/productHome.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/signup.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/signup.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94a888ae05aa3787387431d65168edf553a0a2cf Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/signup.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/__pycache__/updateProfile.cpython-311.pyc b/Product_MicroService_Group3/app/models/__pycache__/updateProfile.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e15076a9dadaac885919dee4330bc1ada1af79da Binary files /dev/null and b/Product_MicroService_Group3/app/models/__pycache__/updateProfile.cpython-311.pyc differ diff --git a/Product_MicroService_Group3/app/models/addReview.py b/Product_MicroService_Group3/app/models/addReview.py new file mode 100644 index 0000000000000000000000000000000000000000..8f67372fa8e1e80281e735675913bf514855c42c --- /dev/null +++ b/Product_MicroService_Group3/app/models/addReview.py @@ -0,0 +1,41 @@ +import pyodbc +from flask import jsonify +from models.database_connection import connect_db + + + +def add_user_review(data): + + try: #error handling + + connection = connect_db() + cursor = connection.cursor() + + + #insert data into reviews and ratings table + insert_user_query = '''INSERT INTO dbo.ReviewsAndRatings (CustomerID, ProductID, Review, rating, Username) +VALUES (?, ?, ?, ?, ?);''' + cursor.execute(insert_user_query, (data["UserID"], data["ProductID"], data["Review"], data["Rating"], data["Username"])) + + + + #commit changes to database if no errors + connection.commit() + + return {"message" : "Review added successfully"} + + except pyodbc.Error as e: #more error handling + print(f"Database error in add_review: {e}") + connection.rollback() + return {"Error" : "Database error"} + + except Exception as e: #more error handling + print(f"Unexpected error occured in add_review: {e}") + connection.rollback() + return {"Error" : "Unexpected error"} + + finally: + if cursor: + cursor.close() + if connection: + connection.close() \ No newline at end of file diff --git a/Product_MicroService_Group3/app/models/database_connection.py b/Product_MicroService_Group3/app/models/database_connection.py new file mode 100644 index 0000000000000000000000000000000000000000..0986cea0aafc84365dceb7ca9170ffa9bbcdeb02 --- /dev/null +++ b/Product_MicroService_Group3/app/models/database_connection.py @@ -0,0 +1,14 @@ +import pyodbc + + +#Connect to database +def connect_db(): + + server = 'Chiamaka' + database = 'Products' + username = 'CHIAMAKA\amych' + password = '' + + connection_string = f'DRIVER={{SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password};Trusted_Connection=yes;' + + return pyodbc.connect(connection_string) \ No newline at end of file diff --git a/Product_MicroService_Group3/app/models/getProduct.py b/Product_MicroService_Group3/app/models/getProduct.py new file mode 100644 index 0000000000000000000000000000000000000000..e66255704b9cba4288f27ebacfb872656be7d5ab --- /dev/null +++ b/Product_MicroService_Group3/app/models/getProduct.py @@ -0,0 +1,59 @@ +#from app import db +import pyodbc +from flask import jsonify +from models.database_connection import connect_db + +#Function to get user info +def get_product(data): + + try: #error handling + + connection = connect_db() + cursor = connection.cursor() + + product_id = data + + #Get image info from database + product_query = "SELECT * FROM dbo.ProductCatalog WHERE ProductID = ?" + cursor.execute(product_query, product_id) + + row = cursor.fetchone() #fetch data + + columns = [column[0] for column in cursor.description] + product_data = dict(zip(columns, row)) + + #Collect image information from database + image_query = "SELECT * FROM dbo.ProductImage WHERE ProductID = ?" + cursor.execute(image_query, product_id) + images = cursor.fetchall() + + image_data = [{"ImageIdentifier": row[0], "ProductID": row[1]} for row in images] + + + #Get reviews from database + reviews_query = "SELECT CustomerID, Username, Review, rating FROM dbo.ReviewsAndRatings WHERE ProductID= ?" + cursor.execute(reviews_query, product_id) + reviews = cursor.fetchall() + + reviews_data = [{"CustomerID": row[0], "Username": row[1], "Review": row[2], "rating" : row[3]} for row in reviews] + + + + #connection.close() + + return (product_data, image_data, reviews_data) + + except pyodbc.Error as e: #error handling + print(f"Database error in get_product: {e}") + return None + + except Exception as e: #error handling + print(f"Unexpected error occured in get_product: {e}") + return None + + finally: + if cursor: + cursor.close() + if connection: + connection.close() + \ No newline at end of file diff --git a/Product_MicroService_Group3/app/models/productHome.py b/Product_MicroService_Group3/app/models/productHome.py new file mode 100644 index 0000000000000000000000000000000000000000..5370a1688ec61d24ae906b532764910788cb2357 --- /dev/null +++ b/Product_MicroService_Group3/app/models/productHome.py @@ -0,0 +1,80 @@ +#from app import db +import pyodbc +from flask import jsonify +from models.database_connection import connect_db + +#Function to get user info +def get_product_by_section(data): + + try: #error handling + + connection = connect_db() + cursor = connection.cursor() + + category_id = data + + #Get image info from database + product_section_query = """SELECT + t1.ProductID, + t1.ProductName, + t1.ProductDesc, + t1.Price, + t3.ProductCategoryID, + t3.CategoryName, + COALESCE(AVG(t4.Rating), 0) AS AverageRating, + t5.ImageIdentifier +FROM + dbo.ProductCatalog AS t1 +INNER JOIN + dbo.ProductCategory AS t2 ON t1.ProductID = t2.ProductID +INNER JOIN + dbo.Category AS t3 ON t2.ProductCategoryID = t3.ProductCategoryID +LEFT JOIN + dbo.ReviewsAndRatings AS t4 ON t1.ProductID = t4.ProductID +LEFT JOIN + dbo.ProductImage AS t5 ON t1.ProductID = t5.ProductID +WHERE + t3.ProductCategoryID = ? +GROUP BY + t1.ProductID, + t1.ProductName, + t1.ProductDesc, + t1.Price, + t3.ProductCategoryID, + t3.CategoryName, + t5.ImageIdentifier; +""" + + cursor.execute(product_section_query, category_id) + + products = cursor.fetchall()#fetch data + + products_data = [{"ProductID": row[0], + "ProductName": row[1], + "ProductDesc": row[2], + "Price" : row[3], + "ProductCategoryID" : row[4], + "CategoryName" : row[5], + "AverageRating" : row[6], + "ImageName" : row[7]} for row in products] + + + + #connection.close() + + return (products_data) + + except pyodbc.Error as e: #error handling + print(f"Database error in get_product_by_section: {e}") + return None + + except Exception as e: #error handling + print(f"Unexpected error occured in get_product_by_section: {e}") + return None + + finally: + if cursor: + cursor.close() + if connection: + connection.close() + \ No newline at end of file diff --git a/Product_MicroService_Group3/app/run.py b/Product_MicroService_Group3/app/run.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Product_MicroService_Group3/app/templates/index.html b/Product_MicroService_Group3/app/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..6207c5207b735653b32e6ad59ac7d969cdfab4eb --- /dev/null +++ b/Product_MicroService_Group3/app/templates/index.html @@ -0,0 +1,6 @@ +<html> + <head></head> + <body> + <p>HELLO</p> + </body> +</html> \ No newline at end of file diff --git a/Product_MicroService_Group3/requirements.txt b/Product_MicroService_Group3/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..6da6fc6ef7722e29986acb00b7f1caba9b9e5545 --- /dev/null +++ b/Product_MicroService_Group3/requirements.txt @@ -0,0 +1,3 @@ +Flask==3.0.0 +gunicorn==21.2.0 +boto3==1.29.0 \ No newline at end of file