diff --git a/apps/ailbl-admin_phone-delete.py b/apps/ailbl-admin_phone-delete.py index 85ec28f..18cdbac 100644 --- a/apps/ailbl-admin_phone-delete.py +++ b/apps/ailbl-admin_phone-delete.py @@ -1,5 +1,17 @@ import crud from flask import jsonify, request +from filters import PhonePage +from helpers import CORS_HEADERS +import logging + +# Cấu hình logging ở đây +logging.basicConfig( + level=logging.INFO, # Mức độ log + # Định dạng log + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', +) + +log = logging.getLogger(__name__) def main(): @@ -27,11 +39,20 @@ def main(): def make_delete_request(): try: - user_id = request.headers.get("X-User") + # Lay user_id tu header X-User + user_id = request.headers.get("X-Fission-Params-UserId") if not user_id: - return jsonify({"error": "user_id is required"}), 400 + return jsonify({"error": "user_id is required"}), 400, CORS_HEADERS - response, status = crud - return jsonify(response), status + phone_id = request.headers.get("X-Fission-Params-UserPhoneId") + if not phone_id: + return jsonify({"error": "phone_id is required"}), 400, CORS_HEADERS + + # Kiem tra so dien thoai co ton tai trong db khong ? + if not crud.exists_phone_for_delete(phone_id, user_id): + return jsonify({"error": "Phone not found"}), 404 + + response, status, headers = crud.delete_phone(phone_id, user_id) + return jsonify(response), status, CORS_HEADERS except Exception as e: return jsonify({"error": str(e)}), 500 diff --git a/apps/ailbl-admin_phone-insert-update-get.py b/apps/ailbl-admin_phone-insert-update-get.py index e1a9379..9f2ce71 100644 --- a/apps/ailbl-admin_phone-insert-update-get.py +++ b/apps/ailbl-admin_phone-insert-update-get.py @@ -1,5 +1,18 @@ import crud from flask import jsonify, request +from filters import PhonePage +from helpers import CORS_HEADERS +from validators import validate_phone_number +import logging + +# # Cấu hình logging ở đây +# logging.basicConfig( +# level=logging.INFO, # Mức độ log +# # Định dạng log +# format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', +# ) + +# log = logging.getLogger(__name__) def main(): @@ -29,20 +42,54 @@ def main(): def make_insert_request(): try: - user_id = request.headers.get("X-User") + # Lay user_id tu header X-User + user_id = request.headers.get("X-Fission-Params-UserId") - response, status = crud - return jsonify(response), status + if not user_id: + return jsonify({"error": "user_id or file is required"}), 400, CORS_HEADERS + + data = request.get_json() # data = chua gia tri body gui len + if not data: + return jsonify({"error": "phone_number is required"}), 400, CORS_HEADERS + + # Lay rieng field phone_number o trong body + phone_number = data.get("phone_number") + if not validate_phone_number(phone_number): + return jsonify({"error": "Invalid phone number"}), 400, CORS_HEADERS + + if crud.exists_phone_for_post(phone_number): + return jsonify({"error": "Phone is exists"}), 404 + + response, status, headers = crud.create_phone(user_id, data) + + return jsonify(response) except Exception as e: return jsonify({"error": str(e)}), 500 def make_get_request(): try: - user_id = request.headers.get("X-User") + user_id = request.headers.get("X-Fission-Params-UserId") if not user_id: - return jsonify({"error": "user_id is required"}), 400 + return jsonify({"error": "user_id is required"}), 400, CORS_HEADERS - return crud + # Lấy tham số filter và phân trang từ request + # Sử dụng default_factory để lấy filter và paging + paging = PhonePage.from_request_queries() + print(paging) + + response = crud.filter_phone(user_id, paging) + + # Kiểm tra xem response có dữ liệu hay không + if not response[0]: # Nếu không có dữ liệu + return jsonify({"message": "No phone numbers found"}), 404, CORS_HEADERS + + return jsonify({ + "data": response[0], # Dữ liệu (danh sách các số điện thoại) + "status": response[1], # Mã trạng thái HTTP (200) + "headers": response[2] # Headers CORS + }), response[1], response[2] + + # return jsonify(response), 200, CORS_HEADERS except Exception as e: return jsonify({"error": str(e)}), 500 diff --git a/apps/ailbl-user_phone-insert-update-get.py b/apps/ailbl-user_phone-insert-update-get.py index 26da743..eb940a5 100644 --- a/apps/ailbl-user_phone-insert-update-get.py +++ b/apps/ailbl-user_phone-insert-update-get.py @@ -3,6 +3,16 @@ from flask import jsonify, request from filters import PhonePage from helpers import CORS_HEADERS from validators import validate_phone_number +import logging + +# Cấu hình logging ở đây +logging.basicConfig( + level=logging.INFO, # Mức độ log + # Định dạng log + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', +) + +log = logging.getLogger(__name__) def main(): @@ -37,15 +47,20 @@ def make_insert_request(): if not user_id: return jsonify({"error": "user_id or file is required"}), 400, CORS_HEADERS - data = request.get_json() + data = request.get_json() # data = chua gia tri body gui len if not data: return jsonify({"error": "phone_number is required"}), 400, CORS_HEADERS + # Lay rieng field phone_number o trong body phone_number = data.get("phone_number") if not validate_phone_number(phone_number): + # Ghi log khi số điện thoại không hợp lệ + log.info(f"Invalid phone number: {phone_number}") return jsonify({"error": "Invalid phone number"}), 400, CORS_HEADERS - if crud.exists_phone(phone_number, user_id): + if crud.exists_phone_for_post(phone_number): + # Ghi log khi số điện thoại đã tồn tại + log.info(f"Phone number already exists: {phone_number}") return jsonify({"error": "Phone is exists"}), 404 response, status, headers = crud.create_phone(user_id, data) @@ -78,6 +93,6 @@ def make_get_request(): "headers": response[2] # Headers CORS }), response[1], response[2] - return jsonify(response), 200, CORS_HEADERS + # return jsonify(response), 200, CORS_HEADERS except Exception as e: return jsonify({"error": str(e)}), 500 diff --git a/apps/ailbl-user_phone_delete.py b/apps/ailbl-user_phone_delete.py index d256b40..d2fa100 100644 --- a/apps/ailbl-user_phone_delete.py +++ b/apps/ailbl-user_phone_delete.py @@ -2,6 +2,16 @@ import crud from flask import jsonify, request from filters import PhonePage from helpers import CORS_HEADERS +import logging + +# Cấu hình logging ở đây +logging.basicConfig( + level=logging.INFO, # Mức độ log + # Định dạng log + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', +) + +log = logging.getLogger(__name__) def main(): @@ -31,17 +41,21 @@ def make_delete_request(): try: user_id = request.headers.get("X-User") # Lay user_id tu header X-User if not user_id: - return jsonify({"error": "user_id is required"}), 400 + return jsonify({"error": "user_id is required"}), 400, CORS_HEADERS phone_id = request.headers.get("X-Fission-Params-UserPhoneId") if not phone_id: - return jsonify({"error": "phone_id is required"}), 400 + return jsonify({"error": "phone_id is required"}), 400, CORS_HEADERS + + log.info(f"DELETE request: user_id={user_id}, phone_id={phone_id}") # Kiem tra so dien thoai co ton tai trong db khong ? - if not crud.exists_phone(phone_id, user_id): + if not crud.exists_phone_for_delete(phone_id, user_id): + log.info( + f"Phone not found: phone_id={phone_id}, user_id={user_id}") return jsonify({"error": "Phone not found"}), 404 - response, status = crud.delete_phone(phone_id, user_id) - return jsonify(response), status + response, status, headers = crud.delete_phone(phone_id, user_id) + return jsonify(response), status, CORS_HEADERS except Exception as e: return jsonify({"error": str(e)}), 500 diff --git a/apps/crud.py b/apps/crud.py index 1359e89..3bf1af2 100644 --- a/apps/crud.py +++ b/apps/crud.py @@ -3,6 +3,7 @@ from filters import PhonePage from flask import jsonify, request from helpers import init_db_connection, CORS_HEADERS from PIL import Image +import logging def create_phone(user_id: str, data): @@ -146,20 +147,39 @@ def delete_phone(phone_id: str, user_id: str) -> dict: 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): +# Nếu là `POST`, kiểm tra sự tồn tại của phone_number => Nghia la kiem tra so +def exists_phone_for_post(phone_number: str): 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(""" + cursor.execute(""" SELECT 1 FROM ailbl_user_phone - WHERE user_id = %s AND phone_number = %s - """, (user_id, phone_number)) + WHERE phone_number = %s + """, (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(""" + 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 True + logging.error(f"Database error checking phone existence: {e}") + raise + finally: + if cursor: + cursor.close() + if conn: + conn.close() # Đảm bảo đóng kết nối sau khi xong + + +# 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 +def exists_phone_for_delete(phone_id: str, user_id: str): + try: + conn = init_db_connection() + cursor = conn.cursor() + + cursor.execute(""" SELECT 1 FROM ailbl_user_phone WHERE id = %s AND user_id = %s @@ -169,7 +189,9 @@ def exists_phone(user_id: str, phone_number: str = None, phone_id: str = None): # 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 + # return False + logging.log.error(f"Database error in exists_phone_for_delete: {e}") + raise finally: if cursor: cursor.close()