diff options
author | Frederick Muriuki Muriithi | 2023-05-10 15:28:11 +0300 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2023-05-10 15:28:11 +0300 |
commit | e373450236e05a4be79b42e99615af20e8b8e536 (patch) | |
tree | adcecf21509f125a66882b8aeaa149c25d4aa9bc /gn3/auth/authorisation/users/collections.py | |
parent | 1d6a4ad6b41c01a06d8ee8984c41e07a36484590 (diff) | |
download | genenetwork3-e373450236e05a4be79b42e99615af20e8b8e536.tar.gz |
auth: Add the /oauth2/user/collections/list endpoint
Add an endpoint to list a user's collections. This only works for logged in
users.
Diffstat (limited to 'gn3/auth/authorisation/users/collections.py')
-rw-r--r-- | gn3/auth/authorisation/users/collections.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/gn3/auth/authorisation/users/collections.py b/gn3/auth/authorisation/users/collections.py new file mode 100644 index 0000000..9ddc138 --- /dev/null +++ b/gn3/auth/authorisation/users/collections.py @@ -0,0 +1,30 @@ +"""Handle user collections.""" +import json + +from redis import Redis + +from .models import User + +def user_collections(rconn: Redis, user: User) -> tuple: + """Retrieve current user collections.""" + return tuple(json.loads( + rconn.hget("collections", str(user.user_id)) or + "[]")) + +def old_user_collections(rconn: Redis, user: User) -> tuple: + """ + Retrieve any old user collections and migrate them to new account. + """ + collections = user_collections(rconn, user) + old_user_accounts = [ + acct for acct in + (json.loads(usr) for usr in rconn.hgetall("users").values()) + if acct.get("email_address", "") == user.email] + for account in old_user_accounts: + collections = collections + tuple(json.loads( + rconn.hget("collections", account["user_id"]) or "[]")) + rconn.hdel("collections", account["user_id"]) + + rconn.hset( + "collections", key=str(user.user_id), value=json.dumps(collections)) + return collections |