i701 99982d13d5
Some checks failed
Build and Push Docker Images / Build and Push Docker Images (push) Failing after 13m45s
Enhance environment variable handling, add Celery configuration, and implement device expiration notification tasks
2025-04-24 10:42:22 +05:00

140 lines
5.1 KiB
Python

from django.shortcuts import get_object_or_404
from api.models import User
from devices.models import Device
from api.sms import send_sms
import requests
from apibase.env import env, BASE_DIR
import os
import logging
from celery import shared_task
from django.utils import timezone
logger = logging.getLogger(__name__)
env.read_env(os.path.join(BASE_DIR, ".env"))
PERSON_VERIFY_BASE_URL = env.str("PERSON_VERIFY_BASE_URL")
@shared_task
def add(x, y):
print(f"Adding {x} and {y}")
return x + y
@shared_task
def deactivate_expired_devices():
expired_devices = Device.objects.filter(
expiry_date__lte=timezone.localtime(timezone.now()), is_active=True
).select_related("user")
print("Expired Devices: ", expired_devices)
count = expired_devices.count()
user_devices_map = {}
for device in expired_devices:
if device.user and device.user.mobile:
if device.user.mobile not in user_devices_map:
user_devices_map[device.user.mobile] = []
user_devices_map[device.user.mobile].append(device.name)
for mobile, device_names in user_devices_map.items():
if not mobile:
continue
device_list = "\n".join(
[f"{i + 1}. {name}" for i, name in enumerate(device_names)]
)
print("device list: ", device_list)
send_sms(
mobile,
f"Dear {mobile}, \n\nThe following devices have expired: \n{device_list}. \n\nPlease make a payment to keep your devices active. \n\n- SAR Link",
)
# expired_devices.update(is_active=False)
print(f"Total {count} expired devices.")
return {
"total_expired_devices": count,
}
def verify_user_with_person_api_task(user_id: int):
"""
Verify the user with the Person API.
:param user_id: The ID of the user to verify.
"""
user = get_object_or_404(User, id=user_id)
# Call the Person API to verify the user
if not PERSON_VERIFY_BASE_URL:
raise ValueError(
"PERSON_VERIFY_BASE_URL is not set in the environment variables."
)
response = requests.get(f"{PERSON_VERIFY_BASE_URL}/api/person/{user.id_card}")
if response.status_code == 200:
data = response.json()
api_nic = data.get("nic")
api_name = data.get("name_en")
api_house_name = data.get("house_name_en")
api_dob = data.get("dob")
api_atoll = data.get("atoll_en")
api_island_name = data.get("island_name_en")
if not user.mobile or 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:
logger.error("User island or atoll is not set.")
return None
logger.info(f"API nic: {api_nic}")
logger.info(f"API name: {api_name}")
logger.info(f"API house name: {api_house_name}")
logger.info(f"API dob: {api_dob}")
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()
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"case User atoll: {user.atoll == api_atoll}")
logger.info("api atoll type: ", {type(api_atoll)})
logger.info("user atoll type: ", {type(user.atoll.name)})
logger.info(f"case User island name: {user.island == 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)}")
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
):
user.verified = True
user.save()
send_sms(
user.mobile,
f"Dear {user.first_name} {user.last_name}, \n\nYour account has been successfully and 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()
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",
)
return False
else:
# Handle the error case
print(f"Error verifying user: {response.status_code} - {response.text}")
return False