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)
|
} as never)
|
||||||
.eq('id', params.messageId);
|
.eq('id', params.messageId);
|
||||||
if (error) throw error;
|
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(
|
export async function softDeleteMessage(
|
||||||
|
|||||||
Reference in New Issue
Block a user