payment/repositories/user.py

41 lines
1.7 KiB
Python

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