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.
This commit is contained in:
Narasimha-sc committed 2026-09-07 17:05:09 +00:00
1 parent 70ae7f9f94
commit 833e1104ae
4 files changed
+8 -14

No files matched your search

+2 -1
View File
@@ -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
-8
View File
@@ -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
+2 -1
View File
@@ -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}
+4 -4
View File
@@ -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