From 85485ae3515fffde8aa0ec8aeac345a4c7e5d114 Mon Sep 17 00:00:00 2001 From: i701 Date: Sat, 2 Aug 2025 13:38:47 +0500 Subject: [PATCH] feat(user): update user verification process to utilize TemporaryUser model and include verification status in response --- api/tasks.py | 64 +++++++++++++++++++++++++++------------------------- api/views.py | 10 +++++--- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/api/tasks.py b/api/tasks.py index f4b3563..002a3a4 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -1,6 +1,6 @@ # pyright: reportGeneralTypeIssues=false from django.shortcuts import get_object_or_404 -from api.models import User +from api.models import TemporaryUser from devices.models import Device from api.notifications import send_sms import os @@ -146,12 +146,12 @@ def verify_user_with_person_api_task(user_id: int): if not user_id: logger.error("User ID is not provided.") return None - user = get_object_or_404(User, id=user_id) - if not user: + t_user = get_object_or_404(TemporaryUser, id=user_id) + if not t_user: logger.error(f"User with ID {user_id} not found.") return None - verification_failed_message = f"""*The following user verification failed*:\n\n*ID Card:* {user.id_card}\n*Name:* {user.first_name} {user.last_name}\n*House Name:* {user.address}\n*Date of Birth:* {user.dob}\n*Island:* {(user.atoll.name if user.atoll else "N/A")} {(user.island.name if user.island else "N/A")}\n*Mobile:* {user.mobile}\nVisit [SAR Link Portal](https://portal.sarlink.net/users/{user_id}/details) to manually verify this user. + verification_failed_message = f"""*The following user verification failed*:\n\n*ID Card:* {t_user.t_id_card}\n*Name:* {t_user.t_first_name} {t_user.t_last_name}\n*House Name:* {t_user.t_address}\n*Date of Birth:* {t_user.t_dob}\n*Island:* {(t_user.t_atoll.name if t_user.t_atoll else "N/A")} {(t_user.t_island.name if t_user.t_island else "N/A")}\n*Mobile:* {t_user.t_mobile}\nVisit [SAR Link Portal](https://portal.sarlink.net/users/{user_id}/details) to manually verify this user. """ # logger.info(verification_failed_message) @@ -163,7 +163,7 @@ def verify_user_with_person_api_task(user_id: int): ) import requests - response = requests.get(f"{PERSON_VERIFY_BASE_URL}/api/person/{user.id_card}") + response = requests.get(f"{PERSON_VERIFY_BASE_URL}/api/person/{t_user.id_card}") if response.status_code == 200: data = response.json() api_nic = data.get("nic") @@ -173,10 +173,10 @@ def verify_user_with_person_api_task(user_id: int): api_atoll = data.get("atoll_en") api_island_name = data.get("island_name_en") - if not user.mobile or user.dob is None: + if not t_user.mobile or t_user.dob is None: logger.error("User mobile or date of birth is not set.") return None - if not user.island or user.atoll is None: + if not t_user.island or t_user.atoll is None: logger.error("User island or atoll is not set.") return None @@ -187,51 +187,53 @@ def verify_user_with_person_api_task(user_id: int): logger.info(f"API atoll: {api_atoll}") logger.info(f"API island name: {api_island_name}") - user_nic = user.id_card - user_name = f"{user.first_name} {user.last_name}" - user_house_name = user.address - user_dob = user.dob.isoformat() + user_nic = t_user.t_id_card + user_name = f"{t_user.t_first_name} {t_user.t_last_name}" + user_house_name = t_user.t_address + user_dob = t_user.t_dob.isoformat() logger.info(f"User nic: {user_nic}") logger.info(f"User name: {user_name}") logger.info(f"User house name: {user_house_name}") logger.info(f"User dob: {user_dob}") - logger.info(f"User atoll: {user.atoll}") - logger.info(f"User island name: {user.island}") + logger.info(f"User atoll: {t_user.t_atoll.name if t_user.t_atoll else 'N/A'}") + logger.info( + f"User island name: {t_user.t_island.name if t_user.t_island else 'N/A'}" + ) logger.info( - f"case User atoll: {user.atoll.name == api_atoll.strip() if api_atoll else False}" + f"case User atoll: {t_user.t_atoll.name == api_atoll.strip() if api_atoll else False}" ) # Defensive check for api_atoll logger.info(f"api atoll type: {type(api_atoll)}") - logger.info(f"user atoll type: {type(user.atoll.name)}") + logger.info(f"user atoll type: {type(t_user.t_atoll.name)}") logger.info( - f"case User island name: {user.island.name == api_island_name.strip() if api_island_name else False}" + f"case User island name: {t_user.t_island.name == api_island_name.strip() if api_island_name else False}" ) # Defensive check for api_island_name logger.info(f"api island name type: {type(api_island_name)}") - logger.info(f"user island name type: {type(user.island.name)}") + logger.info(f"user island name type: {type(t_user.t_island.name)}") if ( - data.get("nic") == user.id_card - and data.get("name_en") == f"{user.first_name} {user.last_name}" - and data.get("house_name_en") == user.address - and data.get("dob").split("T")[0] == user.dob.isoformat() - and data.get("atoll_en").strip() == user.atoll.name - and data.get("island_name_en").strip() == user.island.name + data.get("nic") == t_user.t_id_card + and data.get("name_en") == f"{t_user.t_first_name} {t_user.t_last_name}" + and data.get("house_name_en") == t_user.t_address + and data.get("dob").split("T")[0] == t_user.t_dob.isoformat() + and data.get("atoll_en").strip() == t_user.t_atoll.name + and data.get("island_name_en").strip() == t_user.t_island.name ): - user.verified = True - user.save() + t_user.verified = True + t_user.save() send_sms( - user.mobile, - f"Dear {user.first_name} {user.last_name}, \n\nYour account has been successfully verified. \n\nYou can now manage your devices and make payments through our portal at https://portal.sarlink.net. \n\n - SAR Link", + t_user.t_mobile, + f"Dear {t_user.t_first_name} {t_user.t_last_name}, \n\nYour account has been successfully verified. \n\nYou can now manage your devices and make payments through our portal at https://portal.sarlink.net. \n\n - SAR Link", ) return True else: - user.verified = False - user.save() + t_user.verified = False + t_user.save() send_sms( - user.mobile, - f"Dear {user.first_name} {user.last_name}, \n\nYour account registration is being processed. \n\nWe will notify you once verification is complete. \n\n - SAR Link", + t_user.t_mobile, + f"Dear {t_user.t_first_name} {t_user.t_last_name}, \n\nYour account registration is being processed. \n\nWe will notify you once verification is complete. \n\n - SAR Link", ) # send_clean_telegram_markdown(message=verification_failed_message) diff --git a/api/views.py b/api/views.py index 79ffbb5..6cb6dbd 100644 --- a/api/views.py +++ b/api/views.py @@ -550,15 +550,19 @@ def filter_temporary_user(request): elif mobile: filters |= Q(t_mobile=mobile) - user = TemporaryUser.objects.only("t_id", "otp_verified").filter(filters).first() + user = ( + TemporaryUser.objects.only("t_id", "otp_verified", "t_verified") + .filter(filters) + .first() + ) print(f"Querying with filters: {filters}") print(f"Found temporary user: {user}") return Response( - {"ok": True, "otp_verified": user.otp_verified} + {"ok": True, "otp_verified": user.otp_verified, "t_verified": user.t_verified} if user - else {"ok": False, "otp_verified": False} + else {"ok": False, "otp_verified": False, "t_verified": False} )