69 lines
4.5 KiB
Markdown
69 lines
4.5 KiB
Markdown
# Реализация удаления своих реакций
|
||
|
||
## Описание изменений
|
||
|
||
Добавлена возможность пользователям удалять свои собственные реакции на сообщения в чате.
|
||
|
||
## Внесенные изменения
|
||
|
||
### 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 (реакция должна исчезнуть полностью)
|
||
- Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)
|