From 833e1104ae3140805eeb273d40776910c85712fc Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Mon, 7 Sep 2026 17:05:09 +0000 Subject: [PATCH] core: inline report archiving, matching the moderation paths Review fix: archiveMembersReports duplicated a pattern the moderation paths already inline (delGroupChatItems) or keep as a local where-helper (archiveMessageReports), so Internal.hs is no longer touched and the member list and byUser parameters are gone. markMemberReportsDeleted takes its own timestamp, as its caller shares none. --- src/Simplex/Chat/Library/Commands.hs | 3 ++- src/Simplex/Chat/Library/Internal.hs | 8 -------- src/Simplex/Chat/Library/Subscriber.hs | 3 ++- src/Simplex/Chat/Store/Messages.hs | 8 ++++---- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index 42bea328ea..49f410f627 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -3175,7 +3175,8 @@ processChatCommand cxt nm = \case if groupFeatureUserAllowed SGFFullDelete gInfo then deleteGroupMembersCIs user gInfo ms else markGroupMembersCIsDeleted user gInfo ms membership - archiveMembersReports user gInfo ms membership True + ciIds <- concat <$> withStore' (\db -> forM ms $ \m -> markMemberReportsDeleted db user gInfo m membership) + unless (null ciIds) $ toView $ CEvtGroupChatItemsDeleted user gInfo ciIds True (Just membership) APILeaveGroup groupId -> withUser $ \user@User {userId} -> do gInfo@GroupInfo {membership} <- withFastStore $ \db -> getGroupInfo db cxt user groupId filesInfo <- withFastStore' $ \db -> getGroupFileInfo db user gInfo diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs index 813e628b8a..79b4578d8f 100644 --- a/src/Simplex/Chat/Library/Internal.hs +++ b/src/Simplex/Chat/Library/Internal.hs @@ -647,14 +647,6 @@ markGroupMembersCIsDeleted user gInfo members byGroupMember = do filesInfo <- withStore' $ \db -> fmap concat $ forM members $ \m -> markGroupMemberCIsDeleted_ db user gInfo m byGroupMember deletedTs cancelFilesInProgress user filesInfo --- Reports about a member's messages are authored by the reporter, so deleting the member's own --- chat items never reaches them - they have to be archived separately, as moderation does. -archiveMembersReports :: User -> GroupInfo -> [GroupMember] -> GroupMember -> Bool -> CM () -archiveMembersReports user gInfo members byGroupMember byUser = do - deletedTs <- liftIO getCurrentTime - ciIds <- concat <$> withStore' (\db -> forM members $ \m -> markMemberReportsDeleted db user gInfo m byGroupMember deletedTs) - unless (null ciIds) $ toView $ CEvtGroupChatItemsDeleted user gInfo ciIds byUser (Just byGroupMember) - markGroupMemberCIsDeleted_ :: DB.Connection -> User -> GroupInfo -> GroupMember -> GroupMember -> UTCTime -> IO [CIFileInfo] markGroupMemberCIsDeleted_ db user gInfo member byGroupMember deletedTs = do fs <- getGroupMemberFileInfo db user gInfo member diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 543d330296..1b0d379710 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -3658,7 +3658,8 @@ processAgentMessageConn cxt user@User {userId} corrId agentConnId agentMessage = if groupFeatureMemberAllowed SGFFullDelete m gInfo' then deleteGroupMemberCIs user gInfo' delMem else markGroupMemberCIsDeleted user gInfo' delMem m - archiveMembersReports user gInfo' [delMem] m False + ciIds <- withStore' $ \db -> markMemberReportsDeleted db user gInfo' delMem m + unless (null ciIds) $ toView $ CEvtGroupChatItemsDeleted user gInfo' ciIds False (Just m) forwardToMember :: GroupMember -> CM () forwardToMember member = let fwd = GrpMsgForward {fwdSender = FwdMember (memberId' m) (memberShortenedName m), fwdBrokerTs = brokerTs} diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 00a80a8610..ae04d9c82e 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -3025,9 +3025,9 @@ markMessageReportsDeleted db User {userId} GroupInfo {groupId} ChatItem {meta = |] (DBCIDeleted, deletedTs, groupMemberId, currentTs, userId, groupId, MCReport_, itemSharedMsgId, DBCINotDeleted) -markMemberReportsDeleted :: DB.Connection -> User -> GroupInfo -> GroupMember -> GroupMember -> UTCTime -> IO [ChatItemId] -markMemberReportsDeleted db User {userId} GroupInfo {groupId} reportedMember byGroupMember deletedTs = do - currentTs <- liftIO getCurrentTime +markMemberReportsDeleted :: DB.Connection -> User -> GroupInfo -> GroupMember -> GroupMember -> IO [ChatItemId] +markMemberReportsDeleted db User {userId} GroupInfo {groupId} reportedMember byGroupMember = do + deletedTs <- getCurrentTime map fromOnly <$> DB.query db @@ -3037,7 +3037,7 @@ markMemberReportsDeleted db User {userId} GroupInfo {groupId} reportedMember byG WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND quoted_member_id = ? AND item_deleted = ? RETURNING chat_item_id; |] - (DBCIDeleted, deletedTs, groupMemberId' byGroupMember, currentTs, userId, groupId, MCReport_, memberId' reportedMember, DBCINotDeleted) + (DBCIDeleted, deletedTs, groupMemberId' byGroupMember, deletedTs, userId, groupId, MCReport_, memberId' reportedMember, DBCINotDeleted) markReceivedGroupReportsDeleted :: DB.Connection -> User -> GroupInfo -> UTCTime -> IO [ChatItemId] markReceivedGroupReportsDeleted db User {userId} GroupInfo {groupId, membership} deletedTs = do