Spaces:
Sleeping
Sleeping
| import pymysql | |
| import pandas as pd | |
| from sqlalchemy import create_engine | |
| import os | |
| from dotenv import load_dotenv | |
| from dotenv import load_dotenv, find_dotenv | |
| # Tự động tìm file .env gần nhất trong cây thư mục cha | |
| load_dotenv(find_dotenv(), override=True) | |
| DB_HOST = os.getenv("DB_HOST") | |
| DB_USER = os.getenv("DB_USER") | |
| DB_PASSWORD = os.getenv("DB_PASSWORD") | |
| DB_NAME = os.getenv("DB_NAME") | |
| DB_PORT = os.getenv("DB_PORT") | |
| # Tạo connection string | |
| import os | |
| from urllib.parse import quote | |
| password = os.getenv("DB_PASSWORD") | |
| DB_PASSWORD = quote(password) | |
| # Tạo connection string | |
| connection_uri = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" | |
| # db_url = "mysql+pymysql://root@127.0.0.1:3306/demohmdrinks" | |
| db_url = connection_uri | |
| engine = create_engine(db_url) | |
| # # Kết nối đến MySQL | |
| # conn = pymysql.connect( | |
| # host="localhost", | |
| # user="root", | |
| # password="Yahana0509@", | |
| # database="demohmdrinks", | |
| # port=4000, | |
| # charset="utf8mb4" | |
| # ) | |
| async def get_data_recommend(): | |
| #Lây danh sách yêu thích | |
| query_favourite_items = """ | |
| SELECT f.user_id, fi.pro_id | |
| FROM favourite_item fi | |
| JOIN favourite f ON fi.fav_id = f.fav_id | |
| JOIN product p ON fi.pro_id = p.pro_id | |
| WHERE p.is_deleted = FALSE; | |
| """ | |
| df_favourite_items = pd.read_sql(query_favourite_items, con=engine) | |
| favourite_items_data = { | |
| "user_id": df_favourite_items["user_id"].tolist(), | |
| "product_id": df_favourite_items["pro_id"].tolist() | |
| } | |
| #Lấy danh sách Rating | |
| query_rating = """ SELECT re.user_id, re.pro_id, re.rating_star | |
| FROM review re | |
| JOIN product p ON re.pro_id = p.pro_id | |
| WHERE p.is_deleted = FALSE AND re.is_deleted = FALSE ;""" | |
| df_rating = pd.read_sql(query_rating, con=engine) | |
| reviews_data = { | |
| "user_id": df_rating["user_id"].tolist(), | |
| "product_id": df_rating["pro_id"].tolist(), | |
| "rating": df_rating["rating_star"].tolist() | |
| } | |
| #Lấy danh sách sản phẩm | |
| query_products = """ | |
| SELECT p.pro_id, p.pro_name, c.cate_name AS category | |
| FROM product p | |
| JOIN category c ON p.category_id = c.cate_id | |
| WHERE p.is_deleted = FALSE; | |
| """ | |
| df_products = pd.read_sql(query_products, con=engine) | |
| products_data = { | |
| "product_id": df_products["pro_id"].tolist(), | |
| "name": df_products["pro_name"].tolist(), | |
| "category": df_products["category"].tolist() | |
| } | |
| #Lấy lịch sử mua hàng | |
| query_item_cart_new = """ | |
| SELECT c.user_id, ci.pro_id | |
| FROM cart c | |
| JOIN cart_item ci ON c.cart_id = ci.cart_id | |
| JOIN product p ON ci.pro_id = p.pro_id | |
| WHERE | |
| c.status = 'NEW' | |
| AND ci.is_deleted = FALSE | |
| AND p.is_deleted = FALSE; | |
| """ | |
| df_cart_new_items= pd.read_sql(query_item_cart_new, con=engine) | |
| cart_new_items_data = { | |
| "user_id": df_cart_new_items["user_id"].tolist(), | |
| "product_id": df_cart_new_items["pro_id"].tolist() | |
| } | |
| query_history = """ | |
| SELECT o.user_id, ci.pro_id AS product_id | |
| FROM `orders` o | |
| JOIN order_item oi ON o.order_id = oi.order_id | |
| JOIN cart c ON oi.cart_id = c.cart_id | |
| JOIN cart_item ci ON c.cart_id = ci.cart_id | |
| JOIN product pro ON pro.pro_id = ci.pro_id | |
| JOIN payments p ON o.order_id = p.order_id | |
| WHERE o.status = 'CONFIRMED' | |
| AND p.status = 'SUCCESS' | |
| AND pro.is_deleted = FALSE | |
| UNION ALL | |
| SELECT c.user_id, ci.pro_id AS product_id | |
| FROM cart c | |
| JOIN cart_item ci ON c.cart_id = ci.cart_id | |
| ORDER BY user_id, product_id; | |
| """ | |
| # Đọc dữ liệu vào DataFrame | |
| df_history = pd.read_sql(query_history, con=engine) | |
| order_history_data = { | |
| "user_id": df_history["user_id"].tolist(), | |
| "product_id": df_history["product_id"].tolist() | |
| } | |
| return favourite_items_data,reviews_data,products_data,order_history_data,cart_new_items_data |