From b99ec7b283ed003d7443a54effa2ae4b00df2f2d Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Wed, 28 Jul 2021 14:41:34 +0200
Subject: [PATCH] Improved performance of getuser api endpoint

---
 uffd/api/views.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/uffd/api/views.py b/uffd/api/views.py
index 399ff5d0..1871f0ef 100644
--- a/uffd/api/views.py
+++ b/uffd/api/views.py
@@ -47,9 +47,11 @@ def getgroups():
 		abort(400)
 	return jsonify([generate_group_dict(group) for group in groups])
 
-def generate_user_dict(user):
+def generate_user_dict(user, all_groups=None):
+	if all_groups is None:
+		all_groups = user.groups
 	return {'id': user.uid, 'loginname': user.loginname, 'email': user.mail, 'displayname': user.displayname,
-	        'groups': [group.name for group in user.groups]}
+	        'groups': [group.name for group in all_groups if user in group.members]}
 
 @bp.route('/getusers', methods=['GET', 'POST'])
 @apikey_required()
@@ -58,7 +60,6 @@ def getusers():
 		abort(400)
 	key = (list(request.values.keys()) or [None])[0]
 	values = request.values.getlist(key)
-	Group.query.all() # Fill object cache for better preformance
 	if key is None:
 		users = User.query.all()
 	elif key == 'id' and len(values) == 1:
@@ -72,7 +73,10 @@ def getusers():
 		users = [] if group is None else group.members
 	else:
 		abort(400)
-	return jsonify([generate_user_dict(user) for user in users])
+	all_groups = None
+	if len(users) > 1:
+		all_groups = Group.query.all()
+	return jsonify([generate_user_dict(user, all_groups) for user in users])
 
 @bp.route('/checkpassword', methods=['POST'])
 @apikey_required('checkpassword')
-- 
GitLab