4.5 KiB
4.5 KiB
Реализация удаления своих реакций
Описание изменений
Добавлена возможность пользователям удалять свои собственные реакции на сообщения в чате.
Внесенные изменения
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}для удаления реакций
Как это работает
- Пользователь видит реакции на сообщения в виде эмодзи
- При долгом нажатии на реакцию, система проверяет, принадлежит ли эта реакция текущему пользователю
- Если реакция принадлежит пользователю:
- Показывается диалог подтверждения удаления
- При подтверждении вызывается
removeReaction()в ViewModel - ViewModel вызывает
unreactToMessage()в Repository - Repository делает API-запрос на сервер
- После успешного удаления сообщения обновляются
- Если реакция не принадлежит пользователю:
- Показывается toast с сообщением "Вы не можете удалить эту реакцию"
Технические детали
- Используется long-click для активации удаления реакции (чтобы не конфликтовать с обычным кликом для просмотра списка пользователей)
- Реакции группируются по эмодзи для компактного отображения
- При удалении реакции сообщения автоматически обновляются
- Система проверяет принадлежность реакции пользователю по
chatUserId
Безопасность
- Пользователь может удалять только свои собственные реакции
- Сервер также проверяет права пользователя при обработке запроса на удаление реакции
- Нет возможности удалить реакции других пользователей
Тестирование
Для тестирования функциональности:
- Откройте чат с другими пользователями
- Поставьте реакцию на сообщение
- Долго нажмите на свою реакцию
- Подтвердите удаление в диалоге
- Убедитесь, что реакция исчезла из списка
Также можно проверить:
- Попытку удаления чужой реакции (должен появиться toast)
- Удаление реакции с количеством > 1 (реакция должна исчезнуть полностью)
- Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)