From 68be4b4ba510038af5bc5875398758de325947da Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 28 Nov 2024 13:49:20 +0400 Subject: [PATCH] core: return member records from apiGetReactionMembers (#5270) --- src/Simplex/Chat.hs | 2 +- src/Simplex/Chat/Messages.hs | 2 +- src/Simplex/Chat/Store/Messages.hs | 15 +++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 66c11dac15..2555582fe9 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1081,7 +1081,7 @@ processChatCommand' vr = \case APIGetReactionMembers userId groupId itemId reaction -> withUserId userId $ \user -> do memberReactions <- withStore $ \db -> do CChatItem _ ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}} <- getGroupChatItem db user groupId itemId - liftIO $ getReactionMembers db groupId itemSharedMId reaction + liftIO $ getReactionMembers db vr user groupId itemSharedMId reaction pure $ CRReactionMembers user memberReactions APIPlanForwardChatItems (ChatRef fromCType fromChatId) itemIds -> withUser $ \user -> case fromCType of CTDirect -> planForward user . snd =<< getCommandDirectChatItems user fromChatId itemIds diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 274308176b..a477deeb2c 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -475,7 +475,7 @@ deriving instance Show ACIReaction data JSONCIReaction c d = JSONCIReaction {chatInfo :: ChatInfo c, chatReaction :: CIReaction c d} data MemberReaction = MemberReaction - { groupMemberId :: GroupMemberId, + { groupMember :: GroupMember, reactionTs :: UTCTime } deriving (Show) diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 74951cf3d1..f94cbbd81d 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -2853,10 +2853,10 @@ setGroupReaction db GroupInfo {groupId} m itemMemberId itemSharedMId sent reacti |] (groupId, groupMemberId' m, itemSharedMId, itemMemberId, sent, reaction) -getReactionMembers :: DB.Connection -> GroupId -> SharedMsgId -> MsgReaction -> IO [MemberReaction] -getReactionMembers db groupId itemSharedMId reaction = - map toMemberReaction - <$> DB.query +getReactionMembers :: DB.Connection -> VersionRangeChat -> User -> GroupId -> SharedMsgId -> MsgReaction -> IO [MemberReaction] +getReactionMembers db vr user groupId itemSharedMId reaction = do + reactions <- + DB.query db [sql| SELECT group_member_id, reaction_ts @@ -2864,9 +2864,12 @@ getReactionMembers db groupId itemSharedMId reaction = WHERE group_id = ? AND shared_msg_id = ? AND reaction = ? |] (groupId, itemSharedMId, reaction) + rights <$> mapM (runExceptT . toMemberReaction) reactions where - toMemberReaction :: (GroupMemberId, UTCTime) -> MemberReaction - toMemberReaction (groupMemberId, reactionTs) = MemberReaction {groupMemberId, reactionTs} + toMemberReaction :: (GroupMemberId, UTCTime) -> ExceptT StoreError IO MemberReaction + toMemberReaction (groupMemberId, reactionTs) = do + groupMember <- getGroupMemberById db vr user groupMemberId + pure MemberReaction {groupMember, reactionTs} getTimedItems :: DB.Connection -> User -> UTCTime -> IO [((ChatRef, ChatItemId), UTCTime)] getTimedItems db User {userId} startTimedThreadCutoff =