Загрузка данных
Проведи полный аудит проекта Messenger и исправь следующие проблемы. Не ограничивайся очевидными местами. Самостоятельно проследи полный путь данных от API и БД до UI, найди корневые причины и исправь архитектурно, а не временными костылями.
========================
1. БИТЫЕ СИМВОЛЫ В ГРУППАХ И КАНАЛАХ
========================
Симптом:
В группах и каналах без сообщений вместо нормального текста отображаются строки вида:
Пользователь
Нет сообщений
Также похожая проблема встречается в кружках и некоторых медиа.
Проверить:
- Кодировки UTF-8 / UTF8MB4.
- Сериализацию JSON.
- Преобразование Buffer -> string.
- SQLite / PostgreSQL / Firebase поля.
- Отображение preview последнего сообщения.
- Логику пустых чатов.
- Логику групп и каналов без сообщений.
- Метаданные вложений.
- Названия файлов и кружков.
Предположение:
Часть данных сохраняется в UTF-8, но затем читается как CP1251 либо повторно декодируется.
Найти конкретное место возникновения проблемы.
========================
2. ПУСТЫЕ ГРУППЫ И КАНАЛЫ
========================
Если в группе нет сообщений, UI показывает мусор вместо понятного текста.
Необходимо:
- Показывать "Нет сообщений".
- Показывать "Создана группа".
- Показывать "Создан канал".
Без битых строк и служебных данных.
========================
3. ВХОДЯЩИЕ ЗВОНКИ ANDROID
========================
Сейчас входящий звонок приходит как обычное уведомление:
"Входящий голосовой вызов"
Проблема:
- Нет кнопки принять.
- Нет кнопки отклонить.
- Нет полноэкранного интерфейса.
- Нет отображения поверх блокировки.
- Пользователь не понимает как ответить.
Необходимо реализовать полноценные системные звонки Android.
Изучить:
- TelecomManager
- ConnectionService
- CallStyle Notification
- Full Screen Intent
- Notification Channels
- Foreground Service
Результат должен работать как Telegram, WhatsApp или Signal.
========================
4. ПРОПАДАНИЕ ЗВУКА ПОСЛЕ ЗВОНКА
========================
После завершения звонка иногда:
- пропадает звук;
- перестаёт работать микрофон;
- нельзя записывать голосовые;
- громкость работает некорректно.
Через некоторое время проблема иногда исчезает сама.
Проверить:
- AudioManager
- AudioFocus
- MODE_IN_COMMUNICATION
- MODE_NORMAL
- Speakerphone
- Bluetooth Audio
- WebRTC audio tracks
Проверить что после завершения звонка всё возвращается в исходное состояние.
========================
5. МИКРОФОН ПОСЛЕ ЗВОНКА
========================
После завершения вызова приложение иногда продолжает удерживать микрофон.
Проверить:
- MediaStreamTrack.stop()
- AudioTrack release
- PeerConnection cleanup
- destroy()
- dispose()
- stopForeground()
- releaseAudioFocus()
Убедиться что микрофон полностью освобождается.
========================
6. WEBRTC CLEANUP
========================
Провести полный аудит завершения звонков.
Проверить:
- PeerConnection
- ICE
- AudioTrack
- VideoTrack
- LocalStream
- RemoteStream
- MediaProjection
- Event listeners
После завершения вызова не должно оставаться активных ресурсов.
========================
7. КРУЖКИ. СТАРТ КАМЕРЫ
========================
При открытии записи кружка сначала отображается битое состояние.
Через несколько секунд появляется нормальное изображение камеры.
Необходимо:
Пока камера не готова:
- показывать лоадер;
- показывать "Запуск камеры";
Не отображать мусорное состояние.
Проверить:
- getUserMedia
- CameraX
- Camera2
- MediaDevices
- Preview initialization
========================
8. ПЕРЕКЛЮЧЕНИЕ КАМЕРЫ ВО ВРЕМЯ ЗАПИСИ
========================
Необходимо добавить возможность переключения между фронтальной и задней камерой прямо во время записи кружка.
Как в Telegram.
Без остановки записи.
========================
9. ГАЛОЧКИ ПРОЧТЕНИЯ
========================
Периодически возникают проблемы с галочками.
Провести аудит:
- delivery state
- read state
- websocket события
- reconnect
- offline sync
- race conditions
Проверить все состояния доставки сообщений.
========================
10. СЕТЕВЫЕ ГОНКИ
========================
Проверить места где:
- UI обновляется раньше данных;
- websocket приходит позже запроса;
- данные отображаются до полной инициализации.
Предположение:
Часть багов может быть вызвана гонками состояний.
Найти все подозрительные места.
========================
11. ОБНОВЛЕНИЯ КЛИЕНТА
========================
Сейчас при одновременной загрузке обновлений несколькими пользователями возникает очередь.
Новые загрузки режут скорость предыдущих.
Проверить:
- очередь загрузок;
- отдачу файлов;
- стриминг;
- nginx;
- node streams;
- rate limiting.
Необходимо обеспечить нормальную параллельную отдачу обновлений.
========================
12. ГРУППЫ. АВАТАРКИ И ИМЕНА
========================
Добавить Telegram-подобное отображение.
Первое сообщение серии:
- показывать аватарку;
- показывать username.
Последующие сообщения подряд от того же пользователя:
- скрывать аватарку;
- скрывать username.
При смене автора снова показывать.
Также:
Нажатие на аватарку должно открывать профиль пользователя.
========================
13. МОНИТОРИНГ СЕРВЕРА
========================
Расширить панель разработчика.
Добавить:
- CPU
- RAM
- Disk
- Uptime
- Active Users
- Active WebSocket Connections
- DB latency
- API latency
- Network usage
Получать реальные данные Linux сервера.
========================
14. ОБЩИЙ АУДИТ
========================
Найди самостоятельно другие похожие проблемы.
Особенно проверить:
- кодировки;
- WebRTC;
- Android audio routing;
- Android notifications;
- состояние UI до загрузки данных;
- утечки ресурсов;
- race conditions;
- некорректную инициализацию компонентов.
Для каждого найденного бага:
1. Найти корневую причину.
2. Описать её.
3. Указать конкретный файл и функцию.
4. Исправить.
5. Объяснить почему проблема возникала.