diff --git a/orm/reaction.py b/orm/reaction.py index b9f7cc57..01500685 100644 --- a/orm/reaction.py +++ b/orm/reaction.py @@ -25,6 +25,7 @@ class Reaction(Base): return { "viewed": await ViewedStorage.get_reaction(self.id), "reacted": len(await ReactedStorage.get_reaction(self.id)), + # TODO: "replied" "rating": await ReactedStorage.get_reaction_rating(self.id), "commented": len(await ReactedStorage.get_reaction_comments(self.id)) } diff --git a/resolvers/reactions.py b/resolvers/reactions.py index 0550e8d9..6375a55a 100644 --- a/resolvers/reactions.py +++ b/resolvers/reactions.py @@ -50,9 +50,9 @@ def reactions_unfollow(user, slug): @login_required async def create_reaction(_, info, inp): user = info.context["request"].user - + # TODO: filter allowed reaction kinds - + reaction = Reaction.create(**inp) ReactedStorage.increment(reaction.shout, reaction.replyTo) try: @@ -116,6 +116,19 @@ async def get_shout_reactions(_, info, slug, page, size): r.createdBy = await UserStorage.get_user(r.createdBy or 'discours') return reactions +@query.field("reactionsForSlugs") +async def get_shout_reactions(_, info, slugs, page, size): + offset = page * size + reactions = [] + with local_session() as session: + for slug in slugs: + reactions += session.query(Reaction).\ + filter(Reaction.shout == slug).\ + limit(size).offset(offset).all() + for r in reactions: + r.createdBy = await UserStorage.get_user(r.createdBy or 'discours') + return reactions + @query.field("reactionsAll") async def get_all_reactions(_, info, page=1, size=10): @@ -140,4 +153,4 @@ async def get_reactions_by_author(_, info, slug, page=1, size=50): reactions = session.query(Reaction).filter(Reaction.createdBy == slug).limit(size).offset(offset) for r in reactions: r.createdBy = await UserStorage.get_user(r.createdBy or 'discours') - return reactions \ No newline at end of file + return reactions diff --git a/schema.graphql b/schema.graphql index 8130e88e..51dc5c03 100644 --- a/schema.graphql +++ b/schema.graphql @@ -242,6 +242,7 @@ type Query { reactionsAll(page: Int!, size: Int!): [Reaction]! reactionsByAuthor(slug: String!, page: Int!, size: Int!): [Reaction]! reactionsByShout(slug: String!, page: Int!, size: Int!): [Reaction]! + reactionsForSlugs(slugs: [String]!, page: Int!, size: Int!): [Reaction]! # collab inviteAuthor(slug: String!, author: String!): Result! @@ -347,13 +348,13 @@ enum ReactionKind { PROOF DISPROOF - + COMMENT QUOTE - + PROPOSE ASK - + ACCEPT REJECT } @@ -379,7 +380,7 @@ type Author { slug: String! name: String! userpic: String - caption: String # only for full shout + caption: String # only for full shout bio: String links: [String] }