User domain logic
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
package com.ericampire.android.androidstudycase.data.datasource.user
|
||||
|
||||
import com.ericampire.android.androidstudycase.data.room.UserDao
|
||||
import com.ericampire.android.androidstudycase.domain.entity.User
|
||||
import com.ericampire.android.androidstudycase.util.Result
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import javax.inject.Inject
|
||||
|
||||
class LocalUserDataSource @Inject constructor(
|
||||
private val dao: UserDao
|
||||
) : UserDataSource {
|
||||
override suspend fun save(user: User) {
|
||||
dao.save(user)
|
||||
}
|
||||
|
||||
override fun findAll(): Flow<Result<List<User>>> {
|
||||
return dao.findAll().map {
|
||||
Result.Success(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.ericampire.android.androidstudycase.data.datasource.user
|
||||
|
||||
import com.ericampire.android.androidstudycase.domain.entity.User
|
||||
import com.ericampire.android.androidstudycase.util.Result
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface UserDataSource {
|
||||
suspend fun save(user: User)
|
||||
fun findAll(): Flow<Result<List<User>>>
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.ericampire.android.androidstudycase.data.repository
|
||||
|
||||
import com.ericampire.android.androidstudycase.data.datasource.user.UserDataSource
|
||||
import com.ericampire.android.androidstudycase.domain.entity.User
|
||||
import com.ericampire.android.androidstudycase.domain.repository.UserRepository
|
||||
import com.ericampire.android.androidstudycase.util.Result
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import javax.inject.Inject
|
||||
|
||||
class UserRepositoryImpl @Inject constructor(
|
||||
private val localDataSource: UserDataSource
|
||||
) : UserRepository {
|
||||
override suspend fun save(user: User) {
|
||||
return localDataSource.save(user)
|
||||
}
|
||||
|
||||
override fun findAll(): Flow<Result<List<User>>> {
|
||||
return localDataSource.findAll()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.ericampire.android.androidstudycase.data.room
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import com.ericampire.android.androidstudycase.domain.entity.User
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
interface UserDao {
|
||||
|
||||
@Insert
|
||||
fun save(user: User)
|
||||
|
||||
@Query("SELECT * FROM User")
|
||||
fun findAll(): Flow<List<User>>
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.ericampire.android.androidstudycase.domain.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity
|
||||
data class User(
|
||||
@PrimaryKey
|
||||
val id: Long? = null,
|
||||
val displayName: String,
|
||||
val imageUrl: String,
|
||||
)
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.ericampire.android.androidstudycase.domain.repository
|
||||
|
||||
import com.ericampire.android.androidstudycase.domain.entity.User
|
||||
import com.ericampire.android.androidstudycase.util.Result
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface UserRepository {
|
||||
suspend fun save(user: User)
|
||||
fun findAll(): Flow<Result<List<User>>>
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package com.ericampire.android.androidstudycase.domain.usecase
|
||||
|
||||
internal class FindUsersUseCaseTest
|
||||
Reference in New Issue
Block a user