{"id":18810903,"url":"https://github.com/nauruz-guliev/chat-compose","last_synced_at":"2026-05-02T01:34:52.005Z","repository":{"id":215296376,"uuid":"723459996","full_name":"Nauruz-Guliev/chat-compose","owner":"Nauruz-Guliev","description":"Chat App based on Firebase","archived":false,"fork":false,"pushed_at":"2024-03-25T19:35:07.000Z","size":33642,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-22T03:09:53.752Z","etag":null,"topics":["coil","compose","firebase","hilt","kotest","ktor","mockk","mvi","orbit","realtime-database","room"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nauruz-Guliev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-25T18:30:12.000Z","updated_at":"2024-01-04T20:15:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"3f3efe5e-8d4c-44b5-9d70-5bd428780e54","html_url":"https://github.com/Nauruz-Guliev/chat-compose","commit_stats":null,"previous_names":["nauruz-guliev/chat-compose"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Nauruz-Guliev/chat-compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nauruz-Guliev%2Fchat-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nauruz-Guliev%2Fchat-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nauruz-Guliev%2Fchat-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nauruz-Guliev%2Fchat-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nauruz-Guliev","download_url":"https://codeload.github.com/Nauruz-Guliev/chat-compose/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nauruz-Guliev%2Fchat-compose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32520156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"ssl_error","status_checked_at":"2026-05-02T01:12:54.261Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coil","compose","firebase","hilt","kotest","ktor","mockk","mvi","orbit","realtime-database","room"],"created_at":"2024-11-07T23:23:09.019Z","updated_at":"2026-05-02T01:34:51.985Z","avatar_url":"https://github.com/Nauruz-Guliev.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"#  Firebase Chat\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"/gifs/chat.gif\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"/gifs/profile.gif\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"/gifs/auth.gif\" width=\"120\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n##  Библиотеки:\n\n| Библиотека | Для чего | Подробнее |\n| --- | --- | --- |\n| Firebase | Авторизация, чат, app distribution и др. | Чат основан на firebase realtime database. Пользователи дублируются в realtime database, иначе никак. |\n| Mvi Orbit | Mvi | Это скорее MVVM+. По разным причинам другие библиотеки не понравились, а своё придумывать - долго. |\n| Dagger Hilt | Dependency Injection | Легко завести + compile-time ошибки. |\n| Kotest | Unit-tests | Привык к этой библиотеке. Выбран [BehaviourSpec](https://kotest.io/docs/framework/testing-styles.html#behavior-spec), потому что он удобно разделяет тесты на логические блоки. |\n| Mockk | Моки | Самая удобная библиотека для моков. Умеет мокать даже final классы (не использует наследование под капотом). Благодаря этому можно было избавиться от интерфейсов, но зачем?  |\n| Coil | Загрузка изображений | Мне кажется, лучшая библиотека для загрузки картинок на compose. |\n| Ktor | Запросы к API | Используется только для поиска картинок для профиля. Хорошая замена для Retrofit. |\n| Room | Кэширование | Чаты сохраняются в БД. |\n| Jetpack Compose Navigation | Навигация | По другим библиотекам мало документации. Разбираться в них - долго. |\n\n##  Что реализовано:\n\n- [X] Modules:\n  - [X] App.\n  - [X] 5 Feature (4 Api).\n  - [X] 3 Core.\n- [X] Данные из Api. Используется Ktor. Загружаются картинки из [Splash Api](https://unsplash.com/developers).\n- [X] Авторизация с помощью Firebase Authentication.\n- [X] Compose (+ есть простые анимации).\n- [X] MVI ([Orbit MVI](https://github.com/orbit-mvi/orbit-mvi))\n- [X] Room. Кэширование.\n- [X] Firebase App Distribution. [Тык](https://github.com/Nauruz-Guliev/chat-compose/actions/workflows/job_deploy_firebase_debug.yml) чтобы попробовать.\n- [X] Запуск детекта и unit-тестов на PR в Master-ветку.\n  - [X] Detekt (Немного изменены правила)\n  - [X] Unit-тесты\n  - [X] Lint\n- [X] Firebase\n  - [X] Analytics (Скорее для галочки, но есть)\n  - [X] Crashlytics\n  - [X] Performance Monitoring\n  - [X] Cloud Messaging\n- [ ] Huawei Mobile Services\n- [X] Версионировании через toml-файл.\n- [X] Unit-тесты для use-case'ов.\n\n##  Что можно улучшить: \n\n- Исправить баги:\n  - Если не выходить из приложения и повторно авторизоваться под другим аккаунтом, состояния некоторых экранов сохраняются. Эти состояния не подходят под нового пользователя.\n  - Почему-то не всегда сохраняются состояния экранов при смене табов в BottomNavBar.\n  - Сообщения в чате не всегда правильно сортируются по времени.\n  - и другие баги, которые пока не были обнаружены.\n- Улучшить обработку исключений. Вынести это в базовые классы. Добавить свои исключения. \n- Добавить больше интерактива в чат.\n- Добавить больше полей при регистрации, что позволит задавать фильтры при поиске пользователей.\n- Вынести все размеры в ресурсы.\n- Не для всего есть свои компоненты (composable-функции). Можно что-то вынести, что-то переиспользовать. Сделать свою мини дизайн-систему.\n- Добавить настройки (темы, языка и др.).\n- Отправлять уведомления с помощью Cloud Messaging при изменении данных в Firebase Realtime.\n- Покрыть всё тестами и интегрировать [Jacoco](https://kotest.io/docs/framework/integrations/jacoco.html) для отслеживания покрытия.\n\nАктуальную apk можно скачать [тут](https://github.com/Nauruz-Guliev/chat-compose/releases/tag/DEMO_v0.0.1). \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnauruz-guliev%2Fchat-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnauruz-guliev%2Fchat-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnauruz-guliev%2Fchat-compose/lists"}