Skip to content

Commit

Permalink
Fix getAllUsers (#132)
Browse files Browse the repository at this point in the history
* Started work on fixing the get all users query

* Fixed bugs with offset and limit

* Ran linter
  • Loading branch information
shahanneda authored Jun 2, 2024
1 parent 850e59e commit f8547cd
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 42 deletions.
27 changes: 4 additions & 23 deletions backend/app/graphql/user_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
class UserQueries(QueryList):
getAllUsers = graphene.List(
User,
first=graphene.Int(default_value=5),
limit=graphene.Int(default_value=5),
offset=graphene.Int(default_value=0),
role=graphene.String(default_value=""),
)
Expand All @@ -21,29 +21,10 @@ class UserQueries(QueryList):
offset=graphene.Int(default_value=0),
)

def resolve_getAllUsers(self, info, first, offset, role):
def resolve_getAllUsers(self, info, limit, offset, role):
user_service = services["user_service"]
users = user_service.get_users()

if role != "":
filtered = []
for user in users:
if user.info["role"] == role:
filtered.append(
User(
id=user.id,
info=user.info,
)
)
return filtered[offset : offset + first] # noqa: E203

return [
User(
id=user.id,
info=user.info,
)
for user in users[offset : offset + first] # noqa: E203
]
users = user_service.get_users(offset, limit, role)
return users

def resolve_getUserById(self, info, id):
user_service = services["user_service"]
Expand Down
26 changes: 8 additions & 18 deletions backend/app/services/implementations/user_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,26 +135,16 @@ def get_auth_id_by_user_id(self, user_id):
)
raise e

def get_users(self):
def get_users(self, offset, limit, role):
user_dtos = []
for user in User.objects:
user_dict = UserService.__user_to_serializable_dict_and_remove_auth_id(user)

try:
kwargs = {
"id": user_dict["id"],
"info": user_dict["info"],
}
user_dtos.append(UserDTO(**kwargs))
except Exception as e:
reason = getattr(e, "message", None)
self.logger.error(
"Failed to get users. Reason = {reason}".format(
reason=(reason if reason else str(e))
)
)
raise e
filteredUsers = User.objects()
if role:
filteredUsers = filteredUsers.filter(info__role=role)

for user in filteredUsers.skip(offset).limit(limit):
user_dtos.append(
UserService.__user_to_serializable_dict_and_remove_auth_id(user)
)
return user_dtos

def update_user_coordinates(self, user_dto):
Expand Down
4 changes: 3 additions & 1 deletion backend/app/services/interfaces/user_service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from abc import ABC, abstractmethod

from app.models.user_info import UserInfoRole


class IUserService(ABC):
"""
Expand Down Expand Up @@ -72,7 +74,7 @@ def get_auth_id_by_user_id(self, user_id):
pass

@abstractmethod
def get_users(self):
def get_users(self, offset: int, limit: int, role: UserInfoRole):
"""
Get all users (possibly paginated in the future)
Expand Down

0 comments on commit f8547cd

Please sign in to comment.