feat(P5C.T3): recompute message_mentions on edit
After the ciphertext UPDATE succeeds in editEncryptedMessage, delete the existing message_mentions rows for that message then re-resolve and re-insert from the new plaintext — matching the best-effort pattern used by insertMessage. No signature change needed; conversationId and newPlaintext were already present in EditMessageParams. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -226,6 +226,33 @@ export async function editEncryptedMessage(
|
||||
} as never)
|
||||
.eq('id', params.messageId);
|
||||
if (error) throw error;
|
||||
|
||||
// Recompute mentions: an edit can add or remove @-tokens. Drop old rows
|
||||
// then re-insert from the new plaintext (best-effort, same as insertMessage).
|
||||
try {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const { error: delErr } = await (params.client as any)
|
||||
.from('message_mentions')
|
||||
.delete()
|
||||
.eq('message_id', params.messageId);
|
||||
if (delErr) throw delErr;
|
||||
|
||||
const mentionUsernames = parseMentionUsernames(params.newPlaintext);
|
||||
if (mentionUsernames.length > 0) {
|
||||
const resolver = makeMentionResolver(params.client);
|
||||
const resolved = await resolver.resolveUsernames(params.conversationId, mentionUsernames);
|
||||
if (resolved.size > 0) {
|
||||
await insertMentions(
|
||||
params.client,
|
||||
params.messageId,
|
||||
params.conversationId,
|
||||
[...resolved.values()],
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('mention recompute on edit failed', err);
|
||||
}
|
||||
}
|
||||
|
||||
export async function softDeleteMessage(
|
||||
|
||||
Reference in New Issue
Block a user