Добавил работу с сетью и сценарии авторизации

This commit is contained in:
2025-12-25 16:14:55 +03:00
parent b41de4aaf5
commit d8a0237e43
35 changed files with 869 additions and 271 deletions

View File

@@ -2,10 +2,11 @@ package com.novayaplaneta.domain.model
data class User(
val id: String,
val name: String,
val fullName: String,
val email: String,
val role: UserRole,
val token: String? = null
val createdAt: String? = null,
val updatedAt: String? = null
)
enum class UserRole {

View File

@@ -4,7 +4,10 @@ import com.novayaplaneta.domain.model.User
import kotlinx.coroutines.flow.Flow
interface AuthRepository {
suspend fun register(email: String, fullName: String, password: String, role: String = "CHILD"): Result<User>
suspend fun login(email: String, password: String): Result<User>
suspend fun refresh(): Result<Unit>
suspend fun getMe(): Result<User>
suspend fun logout()
fun getCurrentUser(): Flow<User?>
suspend fun saveUser(user: User)

View File

@@ -0,0 +1,15 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.User
import com.novayaplaneta.domain.repository.AuthRepository
import javax.inject.Inject
class GetMeUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke(): Result<User> {
return authRepository.getMe()
}
}

View File

@@ -0,0 +1,15 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.User
import com.novayaplaneta.domain.repository.AuthRepository
import javax.inject.Inject
class LoginUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke(email: String, password: String): Result<User> {
return authRepository.login(email, password)
}
}

View File

@@ -0,0 +1,14 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.repository.AuthRepository
import javax.inject.Inject
class LogoutUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke() {
authRepository.logout()
}
}

View File

@@ -0,0 +1,20 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.User
import com.novayaplaneta.domain.repository.AuthRepository
import javax.inject.Inject
class RegisterUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke(
email: String,
fullName: String,
password: String,
role: String = "CHILD"
): Result<User> {
return authRepository.register(email, fullName, password, role)
}
}