Тестовое задание для компании tada.team
Заказчик просит провести презентацию мобильного решения нашего мессенджера уже завтра.
В этот момент все в отпуске. У нас имеются материалы по серверу. Необходимо провести презентацию
- Реализовать мобильный клиент чата на фреймворке Flutter
- Приложение взаимодействует с сервером, исходники размещены по адресу: https://github.com/tada-team/nane
- Публикация сервера на сайте: https://nane.tada.team/
- Реализовать основной функционал, а именно - обмен сообщениями
- Необходима максимальная отказоустойчивость: чтобы клиент кликая не сломал приложение
- Отработать ключевые "позитивные" сценарии
- Добавить валидацию, чтобы клиент не создавал данные, с которым он потом не сможет работать
- Сделать упор на качественный код
- Сокет wss://nane.tada.team/ws
- Добавлена авторизация по имени wss://nane.tada.team/ws?username={username}
- На сервере N комнат чата, в которые может отправлять сообщения кто угодно
- При входе в комнату отправляем приветственное сообщение в сокет "text": "Всем чмоки в этом чате!", что приводит к созданию комнаты
- Поддерживаются только текстовые сообщения. Удалять и изменять сообщения нельзя
- Известные ошибки: ошибки HTTP протокола и "room is not found"
- Реализую проект на базе MaterialApp на Flutter
- Использую BLoC в реализации HydratedBLoC, чтобы было кэширование и восстановление состояния
- Добавлю отдельный экран с логом полученных данных из сокета данных
- При отправке сообщения оно вначале должно попасть в список для отправки и отобразиться в экране чата, затем улететь на сервер, затем прилететь в обновлении данных от сокета
- Запускаю на нескольких девайсах
- Проверяю включение / отключение интернета:
- При отправке сообщения в оффлайне, оно должно повиснуть с индикатором загрузки в списке сообщений
- При появлении интернета:
- восстанавливаем работу сокета
- загружаем историю сообщений: GET https://nane.tada.team/api/rooms/{name}/history
- пересылаем все сообщения в списке ожидания
- Проверяю запуск в оффлайн
- Должна быть возможность войти в чат (кэш чата)
- Должна быть возможность отправить сообщения
[√] Flutter (Channel stable, 3.7.12, on Microsoft Windows [Version 10.0.17763.4377], locale ru-RU)
• Flutter version 3.7.12 on channel stable at C:\Users\Lixa141\Documents\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 4d9e56e694 (8 weeks ago), 2023-04-17 21:47:46 -0400
• Engine revision 1a65d409c7
• Dart version 2.19.6
• DevTools version 2.20.1
- При возникновении блочащей ошибки, при открытии пользователем чата, необходимо его вернуть на список чатов - это не учтено в текущей реализации BLoC
- С сервера могут приходить комнаты с заведомо некорректным названием комнаты, таким по которому сервер не отдаст историю и не будет обрабатывать сообщения через сокет. Сейчас приложение показывает бесконечный процесс отправки сообщения, а ответ приходит только при перезапуске чата. Проблема по отправке клиентская. Проблема с обработкой некорректных адресов комнат - серверная. Нужно добавить проверки на клиенте для корректной отработки событий