Skip to content

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

Open
xMODDIIx wants to merge 5 commits intoepic/ANDR-81from
feature/ANDR-50
Open

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

Conversation

@xMODDIIx
Copy link
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
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
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

val isConfirmPasswordVisible: Boolean,
val isSubmitEnabled: Boolean
data class RegistrationFormState(
val nickname: String = "",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Давай уберем значения по умолчанию

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