Skip to content

Lixa141/demo_chat

Repository files navigation

tada_team_chat

Тестовое задание для компании tada.team

Заказчик просит провести презентацию мобильного решения нашего мессенджера уже завтра.
В этот момент все в отпуске. У нас имеются материалы по серверу. Необходимо провести презентацию
  • Реализовать мобильный клиент чата на фреймворке Flutter
  • Приложение взаимодействует с сервером, исходники размещены по адресу: https://github.com/tada-team/nane
  • Публикация сервера на сайте: https://nane.tada.team/

Как понял, что делать?

  1. Реализовать основной функционал, а именно - обмен сообщениями
  2. Необходима максимальная отказоустойчивость: чтобы клиент кликая не сломал приложение
  3. Отработать ключевые "позитивные" сценарии
  4. Добавить валидацию, чтобы клиент не создавал данные, с которым он потом не сможет работать
  5. Сделать упор на качественный код

Детали:

  1. Сокет wss://nane.tada.team/ws
  2. Добавлена авторизация по имени wss://nane.tada.team/ws?username={username}
  3. На сервере N комнат чата, в которые может отправлять сообщения кто угодно
  4. При входе в комнату отправляем приветственное сообщение в сокет "text": "Всем чмоки в этом чате!", что приводит к созданию комнаты
  5. Поддерживаются только текстовые сообщения. Удалять и изменять сообщения нельзя
  6. Известные ошибки: ошибки HTTP протокола и "room is not found"

Подход к реализации

Что делаю:

  1. Реализую проект на базе MaterialApp на Flutter
  2. Использую BLoC в реализации HydratedBLoC, чтобы было кэширование и восстановление состояния
  3. Добавлю отдельный экран с логом полученных данных из сокета данных
  4. При отправке сообщения оно вначале должно попасть в список для отправки и отобразиться в экране чата, затем улететь на сервер, затем прилететь в обновлении данных от сокета

Как тестирую:

  1. Запускаю на нескольких девайсах
  2. Проверяю включение / отключение интернета:
  3. При отправке сообщения в оффлайне, оно должно повиснуть с индикатором загрузки в списке сообщений
  4. При появлении интернета:
    1. восстанавливаем работу сокета
    2. загружаем историю сообщений: GET https://nane.tada.team/api/rooms/{name}/history
    3. пересылаем все сообщения в списке ожидания
  5. Проверяю запуск в оффлайн
    1. Должна быть возможность войти в чат (кэш чата)
    2. Должна быть возможность отправить сообщения

Тестирование проводилось

[√] 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

Планы на развитие

  1. При возникновении блочащей ошибки, при открытии пользователем чата, необходимо его вернуть на список чатов - это не учтено в текущей реализации BLoC
  2. С сервера могут приходить комнаты с заведомо некорректным названием комнаты, таким по которому сервер не отдаст историю и не будет обрабатывать сообщения через сокет. Сейчас приложение показывает бесконечный процесс отправки сообщения, а ответ приходит только при перезапуске чата. Проблема по отправке клиентская. Проблема с обработкой некорректных адресов комнат - серверная. Нужно добавить проверки на клиенте для корректной отработки событий

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages