from utils.database import pack_params class User: def __init__(self, id_=None, name=None, phone=None, email=None, address=None, payment_method=None): self.id = id_ self.name = name self.phone = phone self.email = email self.address = 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, address=self.address, payment_method=self.payment_method) return f"INSERT INTO user ({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, address=self.address, payment_method=self.payment_method) return f"SELECT id, name, phone, email, address, payment_method FROM user 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, address=self.address, payment_method=self.payment_method) return f"SELECT id FROM user 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.uid: if format == "list": params.append(self.uid) elif format == "dict": params["uid"] = self.uid 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.address: if format == "list": params.append(self.address) elif format == "dict": params["address"] = self.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.uid != other_user.uid: different_attrs["uid"] = (self.uid, other_user.uid) 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.address != other_user.address: different_attrs["address"] = (self.address, other_user.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.address, self.payment_method) == (other.name, other.phone, other.email, other.address, other.payment_method)) return False def __hash__(self): return hash((self.name, self.phone, self.email, self.address, self.payment_method))