from custom_decorators import singleton from database import Database from utils.database import pack_params @singleton class UserRepository: def __init__(self, config): self.db = Database(config['MYSQL']) def get_user(self, phone=None, email=None, address=None): params_sql, params = pack_params(phone=phone, email=email, address=address) sql = f"SELECT name, phone, email, address FROM user WHERE {params_sql}" cursor = self.db.execute_query(sql, params) users = cursor.fetchall() return users def create_user(self, phone=None, email=None, address=None): _, params = pack_params(phone=phone, email=email, address=address) sql = f"INSERT INTO user (phone, email, address) VALUES (%s, %s, %s)" self.db.execute_query(sql, params) self.db.commit() def record_exists(self, phone=None, email=None, address=None): params_sql, params = pack_params(phone=phone, email=email, address=address) sql = f"SELECT EXISTS(SELECT 1 FROM user WHERE {params_sql} LIMIT 1)" cursor = self.db.execute_query(sql, params) result = cursor.fetchone() return bool(result[0]) def create_if_not_exists(self, phone=None, email=None, address=None): if not self.record_exists(phone=phone, email=email, address=address): self.create_user(phone=phone, email=email, address=address) def get_and_create_if_not_exists(self, phone=None, email=None, address=None): users = self.get_user(phone=phone, email=email, address=address) if len(users) == 0: self.create_user(phone=phone, email=email, address=address) else: return users