41 lines
1.7 KiB
Python
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
|