mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 14:34:21 +01:00
Speed improvements (#2084)
* Improve speed of `/api/v1/teams/me/fails` * Improve speed of `/api/v1/teams/[team_id]/fails` * Improve speed of `/api/v1/users/me/fails` * Improve speed of `/api/v1/users/[user_id]/fails`
This commit is contained in:
@@ -512,17 +512,20 @@ class TeamPrivateFails(Resource):
|
|||||||
|
|
||||||
view = "admin" if is_admin() else "user"
|
view = "admin" if is_admin() else "user"
|
||||||
|
|
||||||
schema = SubmissionSchema(view=view, many=True)
|
# We want to return the count purely for stats & graphs
|
||||||
response = schema.dump(fails)
|
# but this data isn't really needed by the end user.
|
||||||
|
# Only actually show fail data for admins.
|
||||||
if response.errors:
|
|
||||||
return {"success": False, "errors": response.errors}, 400
|
|
||||||
|
|
||||||
if is_admin():
|
if is_admin():
|
||||||
|
schema = SubmissionSchema(view=view, many=True)
|
||||||
|
response = schema.dump(fails)
|
||||||
|
|
||||||
|
if response.errors:
|
||||||
|
return {"success": False, "errors": response.errors}, 400
|
||||||
|
|
||||||
data = response.data
|
data = response.data
|
||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
count = len(response.data)
|
count = len(fails)
|
||||||
|
|
||||||
return {"success": True, "data": data, "meta": {"count": count}}
|
return {"success": True, "data": data, "meta": {"count": count}}
|
||||||
|
|
||||||
@@ -581,17 +584,20 @@ class TeamPublicFails(Resource):
|
|||||||
|
|
||||||
view = "admin" if is_admin() else "user"
|
view = "admin" if is_admin() else "user"
|
||||||
|
|
||||||
schema = SubmissionSchema(view=view, many=True)
|
# We want to return the count purely for stats & graphs
|
||||||
response = schema.dump(fails)
|
# but this data isn't really needed by the end user.
|
||||||
|
# Only actually show fail data for admins.
|
||||||
if response.errors:
|
|
||||||
return {"success": False, "errors": response.errors}, 400
|
|
||||||
|
|
||||||
if is_admin():
|
if is_admin():
|
||||||
|
schema = SubmissionSchema(view=view, many=True)
|
||||||
|
response = schema.dump(fails)
|
||||||
|
|
||||||
|
if response.errors:
|
||||||
|
return {"success": False, "errors": response.errors}, 400
|
||||||
|
|
||||||
data = response.data
|
data = response.data
|
||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
count = len(response.data)
|
count = len(fails)
|
||||||
|
|
||||||
return {"success": True, "data": data, "meta": {"count": count}}
|
return {"success": True, "data": data, "meta": {"count": count}}
|
||||||
|
|
||||||
|
|||||||
@@ -351,16 +351,20 @@ class UserPrivateFails(Resource):
|
|||||||
fails = user.get_fails(admin=True)
|
fails = user.get_fails(admin=True)
|
||||||
|
|
||||||
view = "user" if not is_admin() else "admin"
|
view = "user" if not is_admin() else "admin"
|
||||||
response = SubmissionSchema(view=view, many=True).dump(fails)
|
|
||||||
if response.errors:
|
|
||||||
return {"success": False, "errors": response.errors}, 400
|
|
||||||
|
|
||||||
|
# We want to return the count purely for stats & graphs
|
||||||
|
# but this data isn't really needed by the end user.
|
||||||
|
# Only actually show fail data for admins.
|
||||||
if is_admin():
|
if is_admin():
|
||||||
|
response = SubmissionSchema(view=view, many=True).dump(fails)
|
||||||
|
if response.errors:
|
||||||
|
return {"success": False, "errors": response.errors}, 400
|
||||||
|
|
||||||
data = response.data
|
data = response.data
|
||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
|
|
||||||
count = len(response.data)
|
count = len(fails)
|
||||||
return {"success": True, "data": data, "meta": {"count": count}}
|
return {"success": True, "data": data, "meta": {"count": count}}
|
||||||
|
|
||||||
|
|
||||||
@@ -418,16 +422,20 @@ class UserPublicFails(Resource):
|
|||||||
fails = user.get_fails(admin=is_admin())
|
fails = user.get_fails(admin=is_admin())
|
||||||
|
|
||||||
view = "user" if not is_admin() else "admin"
|
view = "user" if not is_admin() else "admin"
|
||||||
response = SubmissionSchema(view=view, many=True).dump(fails)
|
|
||||||
if response.errors:
|
|
||||||
return {"success": False, "errors": response.errors}, 400
|
|
||||||
|
|
||||||
|
# We want to return the count purely for stats & graphs
|
||||||
|
# but this data isn't really needed by the end user.
|
||||||
|
# Only actually show fail data for admins.
|
||||||
if is_admin():
|
if is_admin():
|
||||||
|
response = SubmissionSchema(view=view, many=True).dump(fails)
|
||||||
|
if response.errors:
|
||||||
|
return {"success": False, "errors": response.errors}, 400
|
||||||
|
|
||||||
data = response.data
|
data = response.data
|
||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
|
|
||||||
count = len(response.data)
|
count = len(fails)
|
||||||
return {"success": True, "data": data, "meta": {"count": count}}
|
return {"success": True, "data": data, "meta": {"count": count}}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user