87 lines
4.1 KiB
Python
87 lines
4.1 KiB
Python
from utils.database import pack_params
|
|
|
|
|
|
class User:
|
|
def __init__(self, id_=None, name=None, phone=None, email=None, wallet_address=None, payment_method=None):
|
|
self.id = id_
|
|
self.name = name
|
|
self.phone = phone
|
|
self.email = email
|
|
self.wallet_address = wallet_address
|
|
self.payment_method = payment_method
|
|
|
|
def insert_sql(self, params_format="list"):
|
|
params_sql, params = pack_params(params_format=params_format, param_sql="{param}", join_str=",",
|
|
name=self.name, phone=self.phone, email=self.email, wallet_address=self.wallet_address,
|
|
payment_method=self.payment_method)
|
|
return f"INSERT INTO users ({params_sql}) VALUES ({','.join('%s' for _ in params)})", params
|
|
|
|
def select_sql(self, condition="AND", params_format="list"):
|
|
params_sql, params = pack_params(params_format=params_format, param_sql="{param}=%s", join_str=f" {condition} ",
|
|
name=self.name, phone=self.phone, email=self.email, wallet_address=self.wallet_address,
|
|
payment_method=self.payment_method)
|
|
return f"SELECT id, name, phone, email, wallet_address, payment_method FROM users WHERE {params_sql}", params
|
|
|
|
def exists_sql(self, condition="AND", params_format="list"):
|
|
params_sql, params = pack_params(params_format=params_format, param_sql="{param}=%s", join_str=f" {condition} ",
|
|
name=self.name, phone=self.phone, email=self.email, wallet_address=self.wallet_address,
|
|
payment_method=self.payment_method)
|
|
return f"SELECT id FROM users WHERE {params_sql} LIMIT 1", params
|
|
|
|
def params(self, format="dict"):
|
|
if format == "list":
|
|
params = []
|
|
elif format == "dict":
|
|
params = {}
|
|
else:
|
|
raise ValueError("format must be list or dict")
|
|
if self.name:
|
|
if format == "list":
|
|
params.append(self.name)
|
|
elif format == "dict":
|
|
params["name"] = self.name
|
|
if self.phone:
|
|
if format == "list":
|
|
params.append(self.phone)
|
|
elif format == "dict":
|
|
params["phone"] = self.phone
|
|
if self.email:
|
|
if format == "list":
|
|
params.append(self.email)
|
|
elif format == "dict":
|
|
params["email"] = self.email
|
|
if self.wallet_address:
|
|
if format == "list":
|
|
params.append(self.wallet_address)
|
|
elif format == "dict":
|
|
params["wallet_address"] = self.wallet_address
|
|
if self.payment_method:
|
|
if format == "list":
|
|
params.append(self.payment_method)
|
|
elif format == "dict":
|
|
params["payment_method"] = self.payment_method
|
|
return params
|
|
|
|
def get_difference(self, other_user):
|
|
different_attrs = {}
|
|
if self.name != other_user.name:
|
|
different_attrs["name"] = (self.name, other_user.name)
|
|
if self.phone != other_user.phone:
|
|
different_attrs["phone"] = (self.phone, other_user.phone)
|
|
if self.email != other_user.email:
|
|
different_attrs["email"] = (self.email, other_user.email)
|
|
if self.wallet_address != other_user.wallet_address:
|
|
different_attrs["wallet_address"] = (self.wallet_address, other_user.wallet_address)
|
|
if self.payment_method != other_user.payment_method:
|
|
different_attrs["payment_method"] = (self.payment_method, other_user.payment_method)
|
|
return different_attrs
|
|
|
|
def __eq__(self, other):
|
|
if isinstance(other, User):
|
|
return ((self.name, self.phone, self.email, self.wallet_address, self.payment_method)
|
|
== (other.name, other.phone, other.email, other.wallet_address, other.payment_method))
|
|
return False
|
|
|
|
def __hash__(self):
|
|
return hash((self.name, self.phone, self.email, self.wallet_address, self.payment_method))
|