diff options
author | Frederick Muriuki Muriithi | 2025-07-03 11:36:00 -0500 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2025-07-03 11:36:00 -0500 |
commit | daabd4bda2f866bf267d117714ad3b03ced896c8 (patch) | |
tree | 94a6e8fb06d5914d025223a4b9931e4e0999cedd | |
parent | 28ce78c87fb5fe9c81af98f2dea9d539663c4c25 (diff) | |
download | gn-auth-daabd4bda2f866bf267d117714ad3b03ced896c8.tar.gz |
Bugfix: Build up "WHERE" clauses correctly
Have the email and name checked with "OR" where both are present.
-rw-r--r-- | gn_auth/auth/authorisation/users/models.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/gn_auth/auth/authorisation/users/models.py b/gn_auth/auth/authorisation/users/models.py index cc9a4f9..58ebd7a 100644 --- a/gn_auth/auth/authorisation/users/models.py +++ b/gn_auth/auth/authorisation/users/models.py @@ -40,25 +40,32 @@ def __process_age_clause__(age_desc: str) -> tuple[str, int]: raise Exception("Invalid age descriptor.") -def __list_user_clauses_and_params__(**kwargs) -> tuple[list[str], dict[str, Union[int, str]]]: +def __list_user_clauses_and_params__(**kwargs) -> tuple[str, dict[str, Union[int, str]]]: """Process the WHERE clauses, and params for the 'LIST USERS' query.""" - clauses = [] + clauses = "" params = {} - if bool(kwargs.get("email", "").strip()): - clauses = clauses + ["email LIKE :email"] + if bool(kwargs.get("email", "").strip()) and bool(kwargs.get("name", "").strip()): + clauses = "(email LIKE :email OR name LIKE :name)" + params = { + "email": f'%{kwargs["email"].strip()}%', + "name": f'%{kwargs["name"].strip()}%' + } + elif bool(kwargs.get("email", "").strip()): + clauses = "email LIKE :email" params["email"] = f'%{kwargs["email"].strip()}%' - - if bool(kwargs.get("name", "").strip()): + elif bool(kwargs.get("name", "").strip()): clauses = clauses + ["name LIKE :name"] params["name"] = f'%{kwargs["name"].strip()}%' + else: + clauses = "" if bool(kwargs.get("verified", "").strip()): - clauses = clauses + ["verified=:verified"] + clauses = clauses + " AND verified=:verified" params["verified"] = 1 if kwargs["verified"].strip() == "yes" else 0 if bool(kwargs.get("age", "").strip()): _clause, _param = __process_age_clause__(kwargs["age"].strip()) - clauses = clauses + [_clause] + clauses = clauses + f" AND {_clause}" params["created"] = _param return clauses, params @@ -73,7 +80,7 @@ def list_users(conn: db.DbConnection, **kwargs) -> tuple[User, ...]: _query = "SELECT * FROM users" _clauses, _params = __list_user_clauses_and_params__(**kwargs) if len(_clauses) > 0: - _query = _query + " WHERE " + " AND ".join(_clauses) + _query = _query + " WHERE " + _clauses with db.cursor(conn) as cursor: cursor.execute(_query, _params) |