aboutsummaryrefslogtreecommitdiff
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