Skip to content

Commit

Permalink
Use separate entities in domain and data layers.
Browse files Browse the repository at this point in the history
  • Loading branch information
bhavnathacker committed Oct 8, 2022
1 parent 3550347 commit 764992c
Show file tree
Hide file tree
Showing 33 changed files with 107 additions and 99 deletions.
2 changes: 2 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ dependencies {
androidTestImplementation "com.squareup.okhttp3:mockwebserver:4.9.1"
androidTestImplementation "io.mockk:mockk-android:1.10.5"
androidTestImplementation 'androidx.test:runner:1.4.0'

testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
}

protobuf {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ import androidx.datastore.core.DataStoreFactory
import androidx.datastore.dataStoreFile
import androidx.room.Room
import com.bhavnathacker.jettasks.UserPreferences
import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.data.local.TaskDatabase
import com.bhavnathacker.jettasks.data.dao.TaskDao
import com.bhavnathacker.jettasks.data.database.TaskDatabase
import com.bhavnathacker.jettasks.data.mapper.DBTaskMapper
import com.bhavnathacker.jettasks.data.mapper.TaskMapper
import com.bhavnathacker.jettasks.data.mapper.toDBTask
import com.bhavnathacker.jettasks.data.mapper.toTask
import com.bhavnathacker.jettasks.data.repository.DefaultTaskRepository
import com.bhavnathacker.jettasks.data.repository.DefaultUserPreferencesRepository
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
Expand Down Expand Up @@ -100,5 +104,4 @@ object TestAppModule {
@Singleton
@Provides
fun provideUpdateShowCompleted(repository: UserPreferenceRepository): UpdateShowCompleted = DefaultUpdateShowCompleted(repository)

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.bhavnathacker.jettasks.data.local
package com.bhavnathacker.jettasks.data

import androidx.room.TypeConverter
import java.util.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
package com.bhavnathacker.jettasks.data.local
package com.bhavnathacker.jettasks.data.dao

import androidx.room.*
import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.data.model.DBTask
import kotlinx.coroutines.flow.Flow

@Dao
interface TaskDao {
@Query("SELECT * FROM task_tbl ORDER BY id DESC")
fun getTasks(): Flow<List<Task>>
fun getTasks(): Flow<List<DBTask>>

@Query("SELECT * FROM task_tbl where id = :id")
suspend fun getTask(id: Int?): Task?
suspend fun getTask(id: Int?): DBTask?

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(task: Task)
suspend fun insert(task: DBTask)

@Query("DELETE FROM task_tbl")
suspend fun deleteAll()

@Delete
suspend fun deleteTask(task: Task)
suspend fun deleteTask(task: DBTask)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bhavnathacker.jettasks.data.database

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.bhavnathacker.jettasks.data.DateConverter
import com.bhavnathacker.jettasks.data.dao.TaskDao
import com.bhavnathacker.jettasks.data.model.DBTask
import com.bhavnathacker.jettasks.domain.entity.Task

@Database(entities = [DBTask::class], version = 1, exportSchema = false)
@TypeConverters(DateConverter::class)
abstract class TaskDatabase : RoomDatabase() {
abstract fun taskDao(): TaskDao
}

This file was deleted.

24 changes: 24 additions & 0 deletions app/src/main/java/com/bhavnathacker/jettasks/data/model/DBTask.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.bhavnathacker.jettasks.data.model

import androidx.room.Entity
import androidx.room.PrimaryKey
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.entity.TaskPriority
import com.bhavnathacker.jettasks.domain.entity.TaskStatus
import java.util.Date

@Entity(tableName = "task_tbl")
data class DBTask(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
var name: String,
var deadline: Date,
var priority: TaskPriority,
var status: TaskStatus
)

fun DBTask?.toTask(): Task? = this?.let {
Task(id = it.id, name = it.name, deadline = it.deadline, priority = it.priority, status = it.status)
}

fun Task.toDBTask(): DBTask = DBTask(id = this.id, name = this.name, deadline = this.deadline, priority = this.priority, status = this.status)
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package com.bhavnathacker.jettasks.data.repository

import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.data.dao.TaskDao
import com.bhavnathacker.jettasks.data.mapper.DBTaskMapper
import com.bhavnathacker.jettasks.data.mapper.TaskMapper
import com.bhavnathacker.jettasks.data.model.toDBTask
import com.bhavnathacker.jettasks.data.model.toTask
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.*
import javax.inject.Inject

class DefaultTaskRepository @Inject constructor(private val taskDao: TaskDao): TaskRepository {
override suspend fun saveTask(task: Task) = taskDao.insert(task)
override suspend fun deleteTask(task: Task) = taskDao.deleteTask(task)
override suspend fun getTask(id: Int?): Task? = taskDao.getTask(id)
override fun getAllTasks(): Flow<List<Task>> = taskDao.getTasks().flowOn(Dispatchers.IO)
.conflate()

class DefaultTaskRepository @Inject constructor(
private val taskDao: TaskDao) : TaskRepository {
override suspend fun saveTask(task: Task) = taskDao.insert(task.toDBTask())
override suspend fun deleteTask(task: Task) = taskDao.deleteTask(task.toDBTask())
override suspend fun getTask(id: Int?): Task? = taskDao.getTask(id).toTask()
override fun getAllTasks(): Flow<List<Task>> = taskDao.getTasks().map { list ->
list.map { (it.toTask())!! }
}
}
4 changes: 2 additions & 2 deletions app/src/main/java/com/bhavnathacker/jettasks/di/DataModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.bhavnathacker.jettasks.di

import android.content.Context
import androidx.room.Room
import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.data.local.TaskDatabase
import com.bhavnathacker.jettasks.data.dao.TaskDao
import com.bhavnathacker.jettasks.data.database.TaskDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,10 @@ import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.dataStoreFile
import androidx.room.Room
import com.bhavnathacker.jettasks.UserPreferences
import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.data.local.TaskDatabase
import com.bhavnathacker.jettasks.data.repository.DefaultTaskRepository
import com.bhavnathacker.jettasks.data.repository.DefaultUserPreferencesRepository
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import com.bhavnathacker.jettasks.domain.repository.UserPreferenceRepository
import com.bhavnathacker.jettasks.domain.repository.UserPreferencesSerializer
import com.bhavnathacker.jettasks.domain.use_cases.*
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand All @@ -24,11 +18,13 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import javax.inject.Singleton

private const val DATA_STORE_FILE_NAME = "user_prefs.pb"

@Module
@InstallIn(SingletonComponent::class)
object PreferencesModule {

private const val DATA_STORE_FILE_NAME = "user_prefs.pb"

@Singleton
@Provides
fun providesUserPreferencesRepository(datastore: DataStore<UserPreferences>): UserPreferenceRepository =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package com.bhavnathacker.jettasks.di

import com.bhavnathacker.jettasks.UserPreferences
import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.data.local.TaskDatabase
import com.bhavnathacker.jettasks.domain.repository.UserPreferenceRepository
import com.bhavnathacker.jettasks.domain.use_cases.*
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.flow.Flow
import javax.inject.Singleton

@Module
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
package com.bhavnathacker.jettasks.di

import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.dataStoreFile
import androidx.room.Room
import com.bhavnathacker.jettasks.UserPreferences
import com.bhavnathacker.jettasks.data.local.TaskDao
import com.bhavnathacker.jettasks.data.local.TaskDatabase
import com.bhavnathacker.jettasks.data.dao.TaskDao
import com.bhavnathacker.jettasks.data.mapper.DBTaskMapper
import com.bhavnathacker.jettasks.data.mapper.TaskMapper
import com.bhavnathacker.jettasks.data.repository.DefaultTaskRepository
import com.bhavnathacker.jettasks.data.repository.DefaultUserPreferencesRepository
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import com.bhavnathacker.jettasks.domain.repository.UserPreferenceRepository
import com.bhavnathacker.jettasks.domain.repository.UserPreferencesSerializer
import com.bhavnathacker.jettasks.domain.use_cases.*
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import javax.inject.Singleton

@Module
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package com.bhavnathacker.jettasks.domain.model
package com.bhavnathacker.jettasks.domain.entity

import androidx.compose.ui.graphics.Color
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.bhavnathacker.jettasks.presentation.theme.Amber500
import com.bhavnathacker.jettasks.presentation.theme.Green500
import com.bhavnathacker.jettasks.presentation.theme.Orange500
import com.bhavnathacker.jettasks.presentation.theme.Red500
import java.util.*
import java.util.Date

@Entity(tableName = "task_tbl")
data class Task(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val id: Int,
var name: String,
var deadline: Date,
var priority: TaskPriority,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.bhavnathacker.jettasks.domain.model
package com.bhavnathacker.jettasks.domain.entity

enum class TaskPriority {
HIGH, MEDIUM, LOW;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.bhavnathacker.jettasks.domain.model
package com.bhavnathacker.jettasks.domain.entity

enum class TaskStatus {
PENDING, COMPLETED;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.repository

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import kotlinx.coroutines.flow.Flow

interface TaskRepository {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.domain.repository.TaskRepository
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task

interface DeleteTask {
suspend operator fun invoke(task: Task)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task

interface GetTask {
suspend operator fun invoke(id: Int?): Task?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import kotlinx.coroutines.flow.Flow

interface GetTasks {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.domain.use_cases

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task

interface SaveTask {
suspend operator fun invoke(task: Task)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.bhavnathacker.jettasks.presentation.events

import com.bhavnathacker.jettasks.domain.model.TaskPriority
import com.bhavnathacker.jettasks.domain.model.TaskStatus
import com.bhavnathacker.jettasks.domain.entity.TaskPriority
import com.bhavnathacker.jettasks.domain.entity.TaskStatus
import java.util.*

sealed class TaskDetailEvent {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.bhavnathacker.jettasks.presentation.events

import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task

sealed class TaskListEvent {
data class DeleteTask(val task: Task): TaskListEvent()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
import com.bhavnathacker.jettasks.R
import com.bhavnathacker.jettasks.domain.model.TaskPriority
import com.bhavnathacker.jettasks.domain.model.TaskStatus
import com.bhavnathacker.jettasks.domain.entity.TaskPriority
import com.bhavnathacker.jettasks.domain.entity.TaskStatus
import com.bhavnathacker.jettasks.presentation.components.*
import com.bhavnathacker.jettasks.presentation.events.TaskDetailEvent
import com.bhavnathacker.jettasks.presentation.viewmodels.TaskDetailViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
import com.bhavnathacker.jettasks.R
import com.bhavnathacker.jettasks.UserPreferences
import com.bhavnathacker.jettasks.domain.model.Task
import com.bhavnathacker.jettasks.domain.entity.Task
import com.bhavnathacker.jettasks.presentation.components.TaskChip
import com.bhavnathacker.jettasks.presentation.events.TaskListEvent
import com.bhavnathacker.jettasks.presentation.navigation.TaskScreens
Expand Down

0 comments on commit 764992c

Please sign in to comment.