mirror of
https://github.com/abhinavxd/libredesk.git
synced 2026-09-11 13:28:57 +00:00
fix edge cases in private note soft-delete
This commit is contained in:
@@ -317,7 +317,9 @@ const userStore = useUserStore()
|
||||
const alertOpen = ref(false)
|
||||
|
||||
const deleteNote = () => {
|
||||
convStore.deleteMessage(convStore.current?.uuid, props.message.uuid)
|
||||
const conversationUUID = convStore.current?.uuid
|
||||
if (!conversationUUID) return
|
||||
convStore.deleteMessage(conversationUUID, props.message.uuid)
|
||||
alertOpen.value = false
|
||||
}
|
||||
|
||||
|
||||
@@ -515,10 +515,11 @@ export const useConversationStore = defineStore('conversation', () => {
|
||||
try {
|
||||
const resp = await api.deleteMessage(conversationUUID, messageUUID)
|
||||
const deletedText = resp.data.data.content
|
||||
const existing = messages.data.getAllPagesMessages(conversationUUID).find(m => m.uuid === messageUUID)
|
||||
messages.data.updateMessage(conversationUUID, messageUUID, {
|
||||
content: deletedText,
|
||||
text_content: deletedText,
|
||||
meta: { deleted_at: new Date().toISOString() }
|
||||
meta: { ...(existing?.meta || {}), deleted_at: new Date().toISOString() }
|
||||
})
|
||||
incrementMessageVersion()
|
||||
} catch (error) {
|
||||
|
||||
@@ -12,12 +12,9 @@ import (
|
||||
func (m *Manager) DeletePrivateMessage(conversationUUID, messageUUID string) (string, error) {
|
||||
m.lo.Info("deleting private note", "conversation_uuid", conversationUUID, "message_uuid", messageUUID)
|
||||
|
||||
var res struct {
|
||||
MessageID int `db:"message_id"`
|
||||
PreviewUpdated bool `db:"preview_updated"`
|
||||
}
|
||||
var previewUpdated bool
|
||||
deletedPreview := m.i18n.T("conversation.privateNoteDeleted")
|
||||
if err := m.q.DeletePrivateMessage.Get(&res, messageUUID, conversationUUID, deletedPreview); err != nil {
|
||||
if err := m.q.DeletePrivateMessage.Get(&previewUpdated, messageUUID, conversationUUID, deletedPreview); err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return "", envelope.NewError(envelope.NotFoundError, m.i18n.Ts("globals.messages.notFound", "name", m.i18n.Ts("globals.terms.message")), nil)
|
||||
}
|
||||
@@ -30,19 +27,8 @@ func (m *Manager) DeletePrivateMessage(conversationUUID, messageUUID string) (st
|
||||
"text_content": deletedPreview,
|
||||
"meta": map[string]any{"deleted_at": time.Now()},
|
||||
})
|
||||
if res.PreviewUpdated {
|
||||
if previewUpdated {
|
||||
m.BroadcastConversationUpdate(conversationUUID, map[string]any{"last_message": deletedPreview})
|
||||
}
|
||||
|
||||
media, err := m.mediaStore.GetByModel(res.MessageID, "messages")
|
||||
if err != nil {
|
||||
m.lo.Error("error fetching private note media to unlink", "message_id", res.MessageID, "error", err)
|
||||
return deletedPreview, nil
|
||||
}
|
||||
for _, md := range media {
|
||||
if err := m.mediaStore.Attach(md.ID, "messages", 0); err != nil {
|
||||
m.lo.Error("error unlinking private note media", "media_id", md.ID, "error", err)
|
||||
}
|
||||
}
|
||||
return deletedPreview, nil
|
||||
}
|
||||
|
||||
@@ -613,13 +613,18 @@ END;
|
||||
WITH deleted AS (
|
||||
UPDATE conversation_messages
|
||||
SET content = $3, text_content = $3, updated_at = NOW(),
|
||||
meta = meta || jsonb_build_object('deleted_at', NOW())
|
||||
meta = COALESCE(meta, '{}'::jsonb) || jsonb_build_object('deleted_at', NOW())
|
||||
WHERE uuid = $1
|
||||
AND private = true
|
||||
AND meta->>'deleted_at' IS NULL
|
||||
AND conversation_id = (SELECT id FROM conversations WHERE uuid = $2)
|
||||
RETURNING id, conversation_id, created_at
|
||||
),
|
||||
media_unlink AS (
|
||||
UPDATE media SET model_id = 0
|
||||
FROM deleted d
|
||||
WHERE media.model_type = 'messages' AND media.model_id = d.id
|
||||
),
|
||||
preview AS (
|
||||
UPDATE conversations c
|
||||
SET last_message = $3, updated_at = NOW()
|
||||
@@ -632,7 +637,7 @@ preview AS (
|
||||
)
|
||||
RETURNING c.id
|
||||
)
|
||||
SELECT d.id AS message_id, EXISTS (SELECT 1 FROM preview) AS preview_updated
|
||||
SELECT EXISTS (SELECT 1 FROM preview) AS preview_updated
|
||||
FROM deleted d;
|
||||
|
||||
-- name: get-message-source-ids
|
||||
|
||||
Reference in New Issue
Block a user