From 5b59ce396ee626fc271d64b09a580a629e7675c0 Mon Sep 17 00:00:00 2001 From: knst-kotov Date: Wed, 24 Nov 2021 12:59:40 +0300 Subject: [PATCH] return user rating --- resolvers/profile.py | 14 +++++++++++--- schema.graphql | 1 - 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/resolvers/profile.py b/resolvers/profile.py index bd7e6245..f73e3c2b 100644 --- a/resolvers/profile.py +++ b/resolvers/profile.py @@ -1,25 +1,33 @@ -from orm import User, UserRole, Role +from orm import User, UserRole, Role, UserRating from orm.base import local_session from resolvers.base import mutation, query, subscription from auth.authenticate import login_required +from sqlalchemy import func from sqlalchemy.orm import selectinload import asyncio @query.field("getUserBySlug") # get a public profile async def get_user_by_slug(_, info, slug): with local_session() as session: - user = session.query(User).filter(User.slug == slug).first() + row = session.query(User, func.sum(UserRating.value).label("rating")).\ + where(User.slug == slug).\ + join(UserRating, UserRating.user_id == User.id).\ + group_by(User.id).\ + first() + user = row.User + user.rating = row.rating return { "user": user } # TODO: remove some fields for public - @query.field("getCurrentUser") @login_required async def get_current_user(_, info): auth = info.context["request"].auth user_id = auth.user_id + with local_session() as session: user = session.query(User).filter(User.id == user_id).first() + return { "user": user } @query.field("userRoles") diff --git a/schema.graphql b/schema.graphql index 65d25a58..9a0d1363 100644 --- a/schema.graphql +++ b/schema.graphql @@ -211,7 +211,6 @@ type User { updatedAt: DateTime wasOnlineAt: DateTime rating: Int - ratings: [Rating] bio: String notifications: [Int] topics: [String] # user subscribed topics