View (слой Presentation) - отображение элементов на экране, слушатели кнопок / LiveData.
ViewModel (слой Presentation) - дарит нам свой viewModelScope и нужна для вызова методов из UseCase. (не выполняет никакую логику, просто дёргает методы из UseCase)
UseCase (слой Domain) - выполняется вся бизнес-логика. Например, пользователь вводит почту и пароль и в UseCase проверяем на валидность. Если всё плохо, то по LiveData, к примеру, присылаем ошибку и отображаем пользователю. Если все поля валидные, делаем запрос и по той же LiveData присылаем результат (залогинился или нет) и делаем соответствующие действия, например, переводим на главный экран в случае success и заодно сохраняем обновленную JWT пару. Всё это в UseCase.
Repository (слой Data) - наш UseCase обращается к Repository потому что вся связь с БД удаленной или локальной находится именно тут. Например, твой метод логина.