import io from filters import PhonePage from flask import jsonify, request from helpers import init_db_connection, CORS_HEADERS from PIL import Image def create_phone(user_id: str, data): try: conn = init_db_connection() cursor = conn.cursor() # Câu truy vấn SQL để thêm số điện thoại vào bảng UserPhone query = """ INSERT INTO ailbl_user_phone (user_id, phone_number, prefix, area_code, created, modified) VALUES (%s, %s, %s,%s, NOW(), NOW()) """ # Lấy các trường từ data phone_number = data.get("phone_number") # Nếu không có prefix, có thể để null prefix = data.get("prefix", None) area_code = data.get("area_code") # Thực thi câu truy vấn SQL cursor.execute(query, (user_id, phone_number, prefix, area_code)) conn.commit() # Lưu thay đổi vào cơ sở dữ liệu return { "user_id": user_id, "phone_number": phone_number, "prefix": prefix, "area": area_code, "status": "added" }, 200, CORS_HEADERS # result = cursor.fetchall() # return {"message": "Phone created successfully"}, 200, CORS_HEADERS except Exception as e: return {"error": str(e)}, 500, CORS_HEADERS def filter_phone(user_id: str, paging): conn = None # Khởi tạo conn với giá trị None cursor = None try: conn = init_db_connection() cursor = conn.cursor() # Xay dung dieu kien loc conditions = ["user_id = %(user_id)s"] values = {"user_id": user_id} # Điều kiện cơ bản cho user_id # Lọc theo phone_number if paging.filter.phone_number: conditions.append("LOWER(PhoneNumber) LIKE %(phone_number)s") values["phone_number"] = f"%{paging.filter.phone_number.lower()}%" # Lọc theo prefix if paging.filter.prefix: conditions.append("Prefix = %(prefix)s") values["prefix"] = paging.filter.prefix # Lọc theo ngày tạo if paging.filter.created_from: conditions.append("Created >= %(created_from)s") values["created_from"] = paging.filter.created_from if paging.filter.created_to: conditions.append("Created <= %(created_to)s") values["created_to"] = paging.filter.created_to # Lọc theo ngày sửa đổi if paging.filter.modified_from: conditions.append("Modified >= %(modified_from)s") values["modified_from"] = paging.filter.modified_from if paging.filter.modified_to: conditions.append("Modified <= %(modified_to)s") values["modified_to"] = paging.filter.modified_to # Ket hop dieu kien loc where_clause = " AND ".join(conditions) if where_clause: where_clause = "WHERE " + where_clause # Sap xep ket qua neu co: order_clause = "" if paging.sortby: direction = "ASC" if paging.asc else "DESC" order_clause = f"ORDER BY {paging.sortby} {direction}" # Gop Truy van sql = f""" SELECT *, COUNT(*) OVER() AS total FROM ailbl_user_phone {where_clause} {order_clause} LIMIT %(limit)s OFFSET %(offset)s """ values["limit"] = paging.size values["offset"] = paging.page * paging.size cursor.execute(sql, values) # Thuc Thi Cau Truy Van phones = cursor.fetchall() print("Fetched phones: ", phones) # In ra để kiểm tra # Chuyển kết quả thành danh sách các đối tượng với tên trường rõ ràng phone_list = [] for phone in phones: phone_dict = { "id": phone[0], "user_id": phone[1], "phone_number": phone[2], "prefix": phone[3], "area_code": phone[4], "created": phone[5], "modified": phone[6] } phone_list.append(phone_dict) return phones, 200, CORS_HEADERS except Exception as e: return {"error": str(e)}, 500 finally: if conn: conn.close() def delete_phone(phone_id: str, user_id: str) -> dict: try: conn = init_db_connection() cursor = conn.cursor() query = "DELETE FROM ailbl_user_phone WHERE id = %s AND user_id = %s" cursor.execute(query, (phone_id, user_id)) conn.commit() # Save DB return {"message": "Phone deleted successfully"}, 200, CORS_HEADERS except Exception as e: return {"error": str(e)}, 500 finally: if cursor: cursor.close() if conn: conn.close() # Đảm bảo đóng kết nối sau khi xong def exists_phone(user_id: str, phone_number: str = None, phone_id: str = None): try: conn = init_db_connection() cursor = conn.cursor() if phone_number: # Nếu là `POST`, kiểm tra sự tồn tại của phone_number => Nghia la kiem tra so cursor.execute(""" SELECT 1 FROM ailbl_user_phone WHERE user_id = %s AND phone_number = %s """, (user_id, phone_number)) elif phone_id: # Nếu là `DELETE`, kiểm tra sự tồn tại của phone_id => Nghia la kiem tra id cua so phone do cursor.execute(""" SELECT 1 FROM ailbl_user_phone WHERE id = %s AND user_id = %s """, (phone_id, user_id)) row = cursor.fetchone() # Co ket qua thi tra ve du lieu 1 dong # Nếu có dòng dữ liệu, trả về True (tồn tại số điện thoại), nếu không, trả về False return row is not None except Exception as e: return False finally: if cursor: cursor.close() if conn: conn.close() # Đảm bảo đóng kết nối sau khi xong