This commit is contained in:
Viktoria Polyakova
2026-01-30 16:58:30 +03:00
parent a5ed6b8664
commit 9f8b968452
249 changed files with 32198 additions and 0 deletions

View 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 (реакция должна исчезнуть полностью)
- Удаление последней реакции (реакции должны полностью исчезнуть из сообщения)