Updated
This commit is contained in:
68
REACTION_DELETION_IMPLEMENTATION.md
Normal file
68
REACTION_DELETION_IMPLEMENTATION.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Реализация удаления своих реакций
|
||||
|
||||
## Описание изменений
|
||||
|
||||
Добавлена возможность пользователям удалять свои собственные реакции на сообщения в чате.
|
||||
|
||||
## Внесенные изменения
|
||||
|
||||
### 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 (реакция должна исчезнуть полностью)
|
||||
- Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)
|
||||
Reference in New Issue
Block a user