import pika, json import re from pymongo import MongoClient class DataValidator: def __init__(self): pass def validate_mobile_number(self, mobile_number): # Updated regex to allow more flexible mobile number formats if not re.match(r'^[1-9][0-9]{9}$', mobile_number): return False return True def validate_salary_savings(self, salary, savings): # Added validation for negative values if salary < 0 or savings < 0: return False if savings > salary: return False return True def validate_name(self, name): # Updated regex to allow more characters in names if not re.match(r'^[a-zA-Z\s\'-]+$', name): return False return True def validate_email(self, email): if not re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email): return False return True def is_email_duplicate(self, email): client = MongoClient("host.minikube.internal", 27017) db = client.submit_form collection = db.forms return collection.find_one({"email": email}) is None def validate_data(self, mobile_number, salary, savings, first_name, last_name, email): if not self.validate_mobile_number(mobile_number): return False, "Invalid mobile number" if not self.validate_salary_savings(salary, savings): return False, "Savings cannot be more than or negative relative to salary" if not self.validate_name(first_name) or not self.validate_name(last_name): return False, "Invalid first or last name" if not self.validate_email(email): return False, "Invalid Email!" if not self.is_email_duplicate(email): return False, "Email Already Taken!" return True, "Data is valid" def submit_data(data, channel): try: channel.basic_publish( exchange="", routing_key="submit", body= json.dumps(data), properties=pika.BasicProperties( delivery_mode=pika.spec.PERSISTENT_DELIVERY_MODE ), ) except Exception as err: print(err) return f"error in translating this text, {err}", 500