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

69 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Реализация удаления своих реакций
## Описание изменений
Добавлена возможность пользователям удалять свои собственные реакции на сообщения в чате.
## Внесенные изменения
### 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 (реакция должна исчезнуть полностью)
- Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)