Skip to content

Feature/andr 50 Логика презентационного слоя + DI#121

Merged
xMODDIIx merged 6 commits intoepic/ANDR-81from
feature/ANDR-50
Mar 18, 2026
Merged

Feature/andr 50 Логика презентационного слоя + DI#121
xMODDIIx merged 6 commits intoepic/ANDR-81from
feature/ANDR-50

Conversation

@xMODDIIx
Copy link
Copy Markdown
Collaborator

  1. Логика презентационного слоя (RegistrationViewModel):

В RegistrationViewModel инжектится RegistrationUseCase.
Модель состояния RegistrationUiState расширена новыми полями: isLoading (для отображения индикатора загрузки) и error (для передачи текста ошибки на UI).
Добавлена логика обработки экшена SubmitClicked.
Реализован метод submitRegistration(), в котором происходит сбор данных со стейта и вызов UseCase.
Добавлена полноценная обработка ошибок: RegistrationException перехватывается, а доменные ошибки (Network, EmailAlreadyExists, NickNameTaken, InvalidCredentials, Server) маппятся в user-friendly текстовые сообщения для отображения пользователю.

  1. Внедрение зависимостей (DI - Koin):

Созданы Koin-модули для всех слоёв фичи регистрации (RegistrationViewModelModule, RegistrationUseCaseModule, RegistrationRepositoryModule, registrationRemoteDataSourceImplModule).
Модули объединены в общий RegistrationFeatureModule для удобного подключения на уровне приложения.

val isConfirmPasswordVisible: Boolean,
val isSubmitEnabled: Boolean
val isSubmitEnabled: Boolean,
val isLoading: Boolean,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У тебя может одновременно быть и:

  • Загрузка
  • Данные
  • Ошибка?

Если нет, тогда надо поделить по sealed interface RegistrationUiState {...}


private fun submitRegistration() {
val currentState = _state.value
_state.update { it.copy(isLoading = true, error = null) }
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давай вот тут мы как раз и поправим нашу логику.

Не хочется делать _state.update, так как ты из многих мест меняешь свой флоу, а хочется, чтобы он подписывался на изменения с клиента, а потом менялся только через подписку на флоу с данными. Ну и там внутри маппер.

Пример - https://t.me/c/2304084337/7/2905

@xMODDIIx xMODDIIx merged commit 936f327 into epic/ANDR-81 Mar 18, 2026
4 checks passed
@xMODDIIx xMODDIIx deleted the feature/ANDR-50 branch March 18, 2026 17:45
Gaileks pushed a commit that referenced this pull request Apr 18, 2026
* Добавил registrationUseCase в RegistrationViewModel.Так же добавил два стейта в RegistrationUiState

* Настроил Koin DI для модуля регистрации

* Fix build

* Fix 2

* Рефакторинг презентационного слоя: переход на MVI и выделение маппера

* удаление дефолтных значений и централизация стейта в маппере
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants