Files
MCAdroidApp/REACTION_DELETION_IMPLEMENTATION.md
Viktoria Polyakova 9f8b968452 Updated
2026-01-30 16:58:30 +03:00

4.5 KiB
Raw Blame History

Реализация удаления своих реакций

Описание изменений

Добавлена возможность пользователям удалять свои собственные реакции на сообщения в чате.

Внесенные изменения

1. MessageAdapter.kt

  • Добавлен параметр currentUserId в конструктор для гибкого определения текущего пользователя
  • Обновлена логика определения принадлежности реакции пользователю
  • Добавлено уведомление пользователю, если он пытается удалить реакцию, которую не ставил
  • Обновлены методы bind(), showMessageActionsDialog() и displayReactions() для использования переданного currentUserId

2. ChatActivity.kt

  • Обновлен вызов MessageAdapter для передачи currentUserId из SharedPreferences
  • Добавлено получение user_id из настроек приложения

3. ChatViewModel.kt

  • Уже содержал метод removeReaction() для удаления реакций
  • Уже содержал список разрешенных эмодзи для реакций

4. ChatRepository.kt

  • Уже содержал метод unreactToMessage() для API-запроса удаления реакции

5. ChatApiService.kt

  • Уже содержал endpoint PUT /api/chat/chats/{chatId}/messages/{messageId}/unreact/{reactionId} для удаления реакций

Как это работает

  1. Пользователь видит реакции на сообщения в виде эмодзи
  2. При долгом нажатии на реакцию, система проверяет, принадлежит ли эта реакция текущему пользователю
  3. Если реакция принадлежит пользователю:
    • Показывается диалог подтверждения удаления
    • При подтверждении вызывается removeReaction() в ViewModel
    • ViewModel вызывает unreactToMessage() в Repository
    • Repository делает API-запрос на сервер
    • После успешного удаления сообщения обновляются
  4. Если реакция не принадлежит пользователю:
    • Показывается toast с сообщением "Вы не можете удалить эту реакцию"

Технические детали

  • Используется long-click для активации удаления реакции (чтобы не конфликтовать с обычным кликом для просмотра списка пользователей)
  • Реакции группируются по эмодзи для компактного отображения
  • При удалении реакции сообщения автоматически обновляются
  • Система проверяет принадлежность реакции пользователю по chatUserId

Безопасность

  • Пользователь может удалять только свои собственные реакции
  • Сервер также проверяет права пользователя при обработке запроса на удаление реакции
  • Нет возможности удалить реакции других пользователей

Тестирование

Для тестирования функциональности:

  1. Откройте чат с другими пользователями
  2. Поставьте реакцию на сообщение
  3. Долго нажмите на свою реакцию
  4. Подтвердите удаление в диалоге
  5. Убедитесь, что реакция исчезла из списка

Также можно проверить:

  • Попытку удаления чужой реакции (должен появиться toast)
  • Удаление реакции с количеством > 1 (реакция должна исчезнуть полностью)
  • Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)