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 d825f429..8e17e54d 100644 --- a/schema.graphql +++ b/schema.graphql @@ -215,7 +215,6 @@ type User { updatedAt: DateTime wasOnlineAt: DateTime rating: Int - ratings: [Rating] bio: String notifications: [Int] topics: [String] # user subscribed topics