payment/payment_backend/models.py

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))