From 605659a224c6e4e39e6e10f5a691e98fe396b7b6 Mon Sep 17 00:00:00 2001 From: Eric Ampire Date: Mon, 6 Sep 2021 22:59:40 +0200 Subject: [PATCH] User domain logic --- .../datasource/user/LocalUserDataSource.kt | 22 +++++++++++++++++++ .../data/datasource/user/UserDataSource.kt | 10 +++++++++ .../data/repository/UserRepositoryImpl.kt | 20 +++++++++++++++++ .../androidstudycase/data/room/UserDao.kt | 17 ++++++++++++++ .../androidstudycase/domain/entity/User.kt | 12 ++++++++++ .../domain/repository/UserRepository.kt | 10 +++++++++ .../domain/usecase/FindUsersUseCaseTest.kt | 3 +++ 7 files changed, 94 insertions(+) create mode 100644 data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSource.kt create mode 100644 data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/UserDataSource.kt create mode 100644 data/src/main/java/com/ericampire/android/androidstudycase/data/repository/UserRepositoryImpl.kt create mode 100644 data/src/main/java/com/ericampire/android/androidstudycase/data/room/UserDao.kt create mode 100644 domain/src/main/java/com/ericampire/android/androidstudycase/domain/entity/User.kt create mode 100644 domain/src/main/java/com/ericampire/android/androidstudycase/domain/repository/UserRepository.kt create mode 100644 domain/src/test/java/com/ericampire/android/androidstudycase/domain/usecase/FindUsersUseCaseTest.kt diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSource.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSource.kt new file mode 100644 index 0000000..aea8b1e --- /dev/null +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSource.kt @@ -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>> { + return dao.findAll().map { + Result.Success(it) + } + } +} \ No newline at end of file diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/UserDataSource.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/UserDataSource.kt new file mode 100644 index 0000000..742756a --- /dev/null +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/datasource/user/UserDataSource.kt @@ -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>> +} \ No newline at end of file diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/repository/UserRepositoryImpl.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/repository/UserRepositoryImpl.kt new file mode 100644 index 0000000..dec088b --- /dev/null +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/repository/UserRepositoryImpl.kt @@ -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>> { + return localDataSource.findAll() + } +} \ No newline at end of file diff --git a/data/src/main/java/com/ericampire/android/androidstudycase/data/room/UserDao.kt b/data/src/main/java/com/ericampire/android/androidstudycase/data/room/UserDao.kt new file mode 100644 index 0000000..c31c836 --- /dev/null +++ b/data/src/main/java/com/ericampire/android/androidstudycase/data/room/UserDao.kt @@ -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> +} \ No newline at end of file diff --git a/domain/src/main/java/com/ericampire/android/androidstudycase/domain/entity/User.kt b/domain/src/main/java/com/ericampire/android/androidstudycase/domain/entity/User.kt new file mode 100644 index 0000000..12ff8f3 --- /dev/null +++ b/domain/src/main/java/com/ericampire/android/androidstudycase/domain/entity/User.kt @@ -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, +) diff --git a/domain/src/main/java/com/ericampire/android/androidstudycase/domain/repository/UserRepository.kt b/domain/src/main/java/com/ericampire/android/androidstudycase/domain/repository/UserRepository.kt new file mode 100644 index 0000000..01213a3 --- /dev/null +++ b/domain/src/main/java/com/ericampire/android/androidstudycase/domain/repository/UserRepository.kt @@ -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>> +} \ No newline at end of file diff --git a/domain/src/test/java/com/ericampire/android/androidstudycase/domain/usecase/FindUsersUseCaseTest.kt b/domain/src/test/java/com/ericampire/android/androidstudycase/domain/usecase/FindUsersUseCaseTest.kt new file mode 100644 index 0000000..7e47939 --- /dev/null +++ b/domain/src/test/java/com/ericampire/android/androidstudycase/domain/usecase/FindUsersUseCaseTest.kt @@ -0,0 +1,3 @@ +package com.ericampire.android.androidstudycase.domain.usecase + +internal class FindUsersUseCaseTest \ No newline at end of file