Skip to content

Commit

Permalink
add room to device module
Browse files Browse the repository at this point in the history
use 1.5.10 kotlin version with compose 1.0.0
  • Loading branch information
Souleymane Sidibe committed Aug 8, 2021
1 parent 60236f4 commit 1de0675
Show file tree
Hide file tree
Showing 18 changed files with 191 additions and 36 deletions.
3 changes: 2 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,15 @@ android {
composeOptions {
kotlinCompilerExtensionVersion = rootProject.extra["compose_version"] as String
// kotlinCompilerVersion = "1.4.32"
kotlinCompilerVersion = "1.5.10"
// kotlinCompilerVersion = "1.5.10"
kotlinCompilerExtensionVersion = "1.0.0"
}
}

dependencies {
implementation(project(":domain"))
implementation(project(":data"))
implementation(project(":device"))
val koin_version = "3.1.2"
val compose_version = "1.0.0"

Expand Down
6 changes: 4 additions & 2 deletions app/src/main/java/com/soulesidibe/todoapp/TodoApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package com.soulesidibe.todoapp

import android.app.Application
import com.soulesidibe.data.dataModule
import com.soulesidibe.device.deviceModule
import com.soulesidibe.domain.domainModule
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.GlobalContext.startKoin

Expand All @@ -13,8 +15,8 @@ class TodoApp : Application() {

startKoin {
androidLogger()
// androidContext(instance)
modules(appModule, dataModule, domainModule)
androidContext(this@TodoApp)
modules(appModule, dataModule, domainModule, deviceModule)
}
}
}
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
}
dependencies {
classpath("com.android.tools.build:gradle:7.0.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10")

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle.kts files
Expand Down
2 changes: 1 addition & 1 deletion data/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ java {
dependencies {
implementation project(":domain")
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.10"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1"
implementation("io.insert-koin:koin-core:3.1.2")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.soulesidibe.data.datasource

import com.soulesidibe.data.model.TodoData
import com.soulesidibe.domain.entity.TodoEntity
import kotlinx.coroutines.flow.Flow

interface TodoLocalDataSource {

fun getAll(): Flow<List<TodoData>>
}
2 changes: 1 addition & 1 deletion data/src/main/java/com/soulesidibe/data/di.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import com.soulesidibe.domain.repository.TodoRepository
import org.koin.dsl.module

val dataModule = module {
single<TodoRepository> { TodoRepositoryImpl() }
single<TodoRepository> { TodoRepositoryImpl(get()) }
}
5 changes: 5 additions & 0 deletions data/src/main/java/com/soulesidibe/data/model/TodoData.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.soulesidibe.data.model

import java.util.*

data class TodoData(val id: String = UUID.randomUUID().toString(), val title: String)
5 changes: 0 additions & 5 deletions data/src/main/java/com/soulesidibe/data/model/TodoDb.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.soulesidibe.data.model.mapper

import com.soulesidibe.data.model.TodoDb
import com.soulesidibe.data.model.TodoData
import com.soulesidibe.domain.entity.TodoEntity

internal fun TodoEntity.toDb(): TodoDb {
return TodoDb(this.id, this.title)
internal fun TodoEntity.toDb(): TodoData {
return TodoData(this.id, this.title)
}

internal fun TodoDb.toEntity(): TodoEntity {
internal fun TodoData.toEntity(): TodoEntity {
return TodoEntity(id, title)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.soulesidibe.data.repository

import com.soulesidibe.data.model.TodoDb
import com.soulesidibe.data.datasource.TodoLocalDataSource
import com.soulesidibe.data.model.TodoData
import com.soulesidibe.data.model.mapper.toDb
import com.soulesidibe.data.model.mapper.toEntity
import com.soulesidibe.domain.ResponseResult
Expand All @@ -9,29 +10,31 @@ import com.soulesidibe.domain.repository.TodoRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow

internal class TodoRepositoryImpl : TodoRepository {
internal class TodoRepositoryImpl(
private val dataSource: TodoLocalDataSource
) : TodoRepository {

private val database: MutableList<TodoDb> = mutableListOf(
TodoDb(title = "Task 1"),
TodoDb(title = "Task 2"),
TodoDb(title = "Task 3"),
TodoDb(title = "Task 4"),
TodoDb(title = "Task 5"),
TodoDb(title = "Task 6"),
TodoDb(title = "Task 7"),
TodoDb(title = "Task 8"),
TodoDb(title = "Task 9"),
TodoDb(title = "Task 10"),
TodoDb(title = "Task 11"),
TodoDb(title = "Task 12"),
TodoDb(title = "Task 13"),
TodoDb(title = "Task 14"),
TodoDb(title = "Task 15"),
private val database: MutableList<TodoData> = mutableListOf(
TodoData(title = "Task 1"),
TodoData(title = "Task 2"),
TodoData(title = "Task 3"),
TodoData(title = "Task 4"),
TodoData(title = "Task 5"),
TodoData(title = "Task 6"),
TodoData(title = "Task 7"),
TodoData(title = "Task 8"),
TodoData(title = "Task 9"),
TodoData(title = "Task 10"),
TodoData(title = "Task 11"),
TodoData(title = "Task 12"),
TodoData(title = "Task 13"),
TodoData(title = "Task 14"),
TodoData(title = "Task 15"),
)

private lateinit var todos: MutableStateFlow<ResponseResult<List<TodoEntity>>>

private val transform: (TodoDb) -> TodoEntity = { todoDb -> todoDb.toEntity() }
private val transform: (TodoData) -> TodoEntity = { todoDb -> todoDb.toEntity() }

override suspend fun get(): Flow<ResponseResult<List<TodoEntity>>> {
if (database.isEmpty()) {
Expand Down
23 changes: 22 additions & 1 deletion device/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-kapt'
}

android {
Expand All @@ -14,6 +15,16 @@ android {

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"

javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}

}

buildTypes {
Expand All @@ -32,11 +43,21 @@ android {
}

dependencies {
implementation project(":data")

implementation("io.insert-koin:koin-core:3.1.2")
implementation "io.insert-koin:koin-android:3.1.2"

implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
testImplementation 'junit:junit:4.+'

def room_version = "2.3.0"
implementation("androidx.room:room-runtime:$room_version")
implementation("androidx.room:room-ktx:$room_version")
kapt("androidx.room:room-compiler:$room_version")

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
40 changes: 40 additions & 0 deletions device/schemas/com.soulesidibe.device.db.TodoDatabase/1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "b8326ea7d60208f490d5cc177907105b",
"entities": [
{
"tableName": "todos",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": false
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b8326ea7d60208f490d5cc177907105b')"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.soulesidibe.device.datasource

import com.soulesidibe.data.datasource.TodoLocalDataSource
import com.soulesidibe.data.model.TodoData
import com.soulesidibe.device.db.dao.TodoDao
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

internal class TodoLocalDataSourceImpl(
private val dao: TodoDao
) : TodoLocalDataSource {

override fun getAll(): Flow<List<TodoData>> {
return dao.getAll().map { todoDb -> todoDb.map { TodoData(it.id, it.title) } }
}
}
12 changes: 12 additions & 0 deletions device/src/main/java/com/soulesidibe/device/db/TodoDatabase.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.soulesidibe.device.db

import androidx.room.Database
import androidx.room.RoomDatabase
import com.soulesidibe.device.db.dao.TodoDao
import com.soulesidibe.device.model.TodoDb

@Database(entities = [TodoDb::class], version = 1)
internal abstract class TodoDatabase: RoomDatabase() {

abstract fun getTodoDao(): TodoDao
}
21 changes: 21 additions & 0 deletions device/src/main/java/com/soulesidibe/device/db/dao/TodoDao.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.soulesidibe.device.db.dao

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import com.soulesidibe.device.model.TodoDb
import kotlinx.coroutines.flow.Flow

@Dao
interface TodoDao {

@Query("select * from todos")
fun getAll(): Flow<List<TodoDb>>

@Insert
suspend fun insert(todoDb: TodoDb): Long

@Delete
suspend fun delete(todoDb: TodoDb)
}
19 changes: 19 additions & 0 deletions device/src/main/java/com/soulesidibe/device/di.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.soulesidibe.device

import androidx.room.Room
import com.soulesidibe.data.datasource.TodoLocalDataSource
import com.soulesidibe.device.datasource.TodoLocalDataSourceImpl
import com.soulesidibe.device.db.TodoDatabase
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module


val deviceModule = module {

single {
Room.databaseBuilder(androidContext(), TodoDatabase::class.java, "todos_db")
.build()
}
single { get<TodoDatabase>().getTodoDao() }
single<TodoLocalDataSource> { TodoLocalDataSourceImpl(get()) }
}
10 changes: 10 additions & 0 deletions device/src/main/java/com/soulesidibe/device/model/TodoDb.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.soulesidibe.device.model

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "todos")
data class TodoDb(
@PrimaryKey val id: String,
val title: String
)
2 changes: 1 addition & 1 deletion domain/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ java {

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.10"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1"
implementation("io.insert-koin:koin-core:3.1.2")
}

0 comments on commit 1de0675

Please sign in to comment.