Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nauruz-guliev/chat-compose

Chat App based on Firebase
https://github.com/nauruz-guliev/chat-compose

coil compose firebase hilt kotest ktor mockk mvi orbit realtime-database room

Last synced: 11 days ago
JSON representation

Chat App based on Firebase

Awesome Lists containing this project

README

        

# Firebase Chat





## Библиотеки:

| Библиотека | Для чего | Подробнее |
| --- | --- | --- |
| Firebase | Авторизация, чат, app distribution и др. | Чат основан на firebase realtime database. Пользователи дублируются в realtime database, иначе никак. |
| Mvi Orbit | Mvi | Это скорее MVVM+. По разным причинам другие библиотеки не понравились, а своё придумывать - долго. |
| Dagger Hilt | Dependency Injection | Легко завести + compile-time ошибки. |
| Kotest | Unit-tests | Привык к этой библиотеке. Выбран [BehaviourSpec](https://kotest.io/docs/framework/testing-styles.html#behavior-spec), потому что он удобно разделяет тесты на логические блоки. |
| Mockk | Моки | Самая удобная библиотека для моков. Умеет мокать даже final классы (не использует наследование под капотом). Благодаря этому можно было избавиться от интерфейсов, но зачем? |
| Coil | Загрузка изображений | Мне кажется, лучшая библиотека для загрузки картинок на compose. |
| Ktor | Запросы к API | Используется только для поиска картинок для профиля. Хорошая замена для Retrofit. |
| Room | Кэширование | Чаты сохраняются в БД. |
| Jetpack Compose Navigation | Навигация | По другим библиотекам мало документации. Разбираться в них - долго. |

## Что реализовано:

- [X] Modules:
- [X] App.
- [X] 5 Feature (4 Api).
- [X] 3 Core.
- [X] Данные из Api. Используется Ktor. Загружаются картинки из [Splash Api](https://unsplash.com/developers).
- [X] Авторизация с помощью Firebase Authentication.
- [X] Compose (+ есть простые анимации).
- [X] MVI ([Orbit MVI](https://github.com/orbit-mvi/orbit-mvi))
- [X] Room. Кэширование.
- [X] Firebase App Distribution. [Тык](https://github.com/Nauruz-Guliev/chat-compose/actions/workflows/job_deploy_firebase_debug.yml) чтобы попробовать.
- [X] Запуск детекта и unit-тестов на PR в Master-ветку.
- [X] Detekt (Немного изменены правила)
- [X] Unit-тесты
- [X] Lint
- [X] Firebase
- [X] Analytics (Скорее для галочки, но есть)
- [X] Crashlytics
- [X] Performance Monitoring
- [X] Cloud Messaging
- [ ] Huawei Mobile Services
- [X] Версионировании через toml-файл.
- [X] Unit-тесты для use-case'ов.

## Что можно улучшить:

- Исправить баги:
- Если не выходить из приложения и повторно авторизоваться под другим аккаунтом, состояния некоторых экранов сохраняются. Эти состояния не подходят под нового пользователя.
- Почему-то не всегда сохраняются состояния экранов при смене табов в BottomNavBar.
- Сообщения в чате не всегда правильно сортируются по времени.
- и другие баги, которые пока не были обнаружены.
- Улучшить обработку исключений. Вынести это в базовые классы. Добавить свои исключения.
- Добавить больше интерактива в чат.
- Добавить больше полей при регистрации, что позволит задавать фильтры при поиске пользователей.
- Вынести все размеры в ресурсы.
- Не для всего есть свои компоненты (composable-функции). Можно что-то вынести, что-то переиспользовать. Сделать свою мини дизайн-систему.
- Добавить настройки (темы, языка и др.).
- Отправлять уведомления с помощью Cloud Messaging при изменении данных в Firebase Realtime.
- Покрыть всё тестами и интегрировать [Jacoco](https://kotest.io/docs/framework/integrations/jacoco.html) для отслеживания покрытия.

Актуальную apk можно скачать [тут](https://github.com/Nauruz-Guliev/chat-compose/releases/tag/DEMO_v0.0.1).