payment/payment_backend/models.py

138 lines
7.3 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, query_columns=None, condition="AND", params_format="list"):
if query_columns is None:
query_columns = ["id", "name", "phone", "email", "wallet_address", "payment_method"]
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 {",".join(query_columns)} 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))
class Order:
def __init__(self, id_=None, order_id=None, name=None, phone=None, email=None, quant=None, payment_method=None,
from_address=None, to_address=None, create_timestamp=None, update_timestamp=None, status=None):
self.id = id_
self.order_id = order_id
self.name = name
self.phone = phone
self.email = email
self.quant = quant
self.payment_method = payment_method
self.from_address = from_address
self.to_address = to_address
self.create_timestamp = create_timestamp
self.update_timestamp = update_timestamp
self.status = status
def insert_sql(self, params_format="list"):
params_sql, params = pack_params(params_format=params_format, param_sql="{param}", join_str=",",
order_id=self.order_id, name=self.name, phone=self.phone, email=self.email,
quant=self.quant, payment_method=self.payment_method,
from_address=self.from_address, to_address=self.to_address,
create_timestamp=self.create_timestamp, update_timestamp=self.update_timestamp,
status=self.status)
return f"INSERT INTO orders ({params_sql}) VALUES ({','.join('%s' for _ in params)})", params
def select_sql(self, query_columns=None, condition="AND", params_format="list"):
if query_columns is None:
query_columns = ['order_id', 'name', 'phone', 'email', 'quant', 'payment_method', 'from_address']
params_sql, params = pack_params(params_format=params_format, param_sql="{param}=%s", join_str=f" {condition} ",
order_id=self.order_id, name=self.name, phone=self.phone, email=self.email,
quant=self.quant, payment_method=self.payment_method,
from_address=self.from_address, to_address=self.to_address,
create_timestamp=self.create_timestamp, update_timestamp=self.update_timestamp,
status=self.status)
return f'SELECT {",".join(query_columns)} FROM orders 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} ",
order_id=self.order_id, name=self.name, phone=self.phone, email=self.email,
quant=self.quant, payment_method=self.payment_method,
from_address=self.from_address, to_address=self.to_address,
create_timestamp=self.create_timestamp, update_timestamp=self.update_timestamp,
status=self.status)
return f"SELECT id FROM orders WHERE {params_sql} LIMIT 1", params