about summary refs log tree commit diff
path: root/gn3/auth/authorisation/users/collections.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/auth/authorisation/users/collections.py')
-rw-r--r--gn3/auth/authorisation/users/collections.py30
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