From 31cda158fef8de676b2e11440356255b7b2c200a Mon Sep 17 00:00:00 2001
From: Muhammad Rifko Favian <13521075@std.stei.itb.ac.id>
Date: Mon, 1 Apr 2024 03:43:32 +0700
Subject: [PATCH] feat: transaction repo and vm (still error)

---
 .idea/kotlinc.xml                             |  2 +-
 .idea/misc.xml                                |  1 -
 app/build.gradle.kts                          | 12 +++++++----
 .../repository/TransactionRepository.kt       | 20 ++++++++++++++++++
 .../ui/transaction/TransactionViewModel.kt    | 21 ++++++++++++++-----
 build.gradle.kts                              |  1 +
 gradle.properties                             |  1 +
 gradle/libs.versions.toml                     |  3 ++-
 8 files changed, 49 insertions(+), 12 deletions(-)
 create mode 100644 app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt

diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index fdf8d99..fe63bb6 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="KotlinJpsPluginSettings">
-    <option name="version" value="1.9.0" />
+    <option name="version" value="1.9.23" />
   </component>
 </project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 0ad17cb..8978d23 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 33277ad..303188d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,6 +1,7 @@
 plugins {
     alias(libs.plugins.androidApplication)
     alias(libs.plugins.jetbrainsKotlinAndroid)
+    alias(libs.plugins.jetbrainsKotlinKapt)
 }
 
 android {
@@ -45,12 +46,15 @@ dependencies {
     implementation(libs.androidx.lifecycle.viewmodel.ktx)
     implementation(libs.androidx.navigation.fragment.ktx)
     implementation(libs.androidx.navigation.ui.ktx)
-    implementation(libs.room.runtime)
-    implementation(libs.room.compiler)
-    implementation(libs.room.ktx)
-    implementation(libs.room.common)
     testImplementation(libs.junit)
     androidTestImplementation(libs.androidx.junit)
     androidTestImplementation(libs.androidx.espresso.core)
 
+    // Room
+    implementation(libs.room.runtime)
+    implementation(libs.room.compiler)
+    implementation(libs.room.ktx)
+    implementation(libs.room.common)
+    annotationProcessor(libs.room.compiler)
+    kapt(libs.room.compiler)
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt
new file mode 100644
index 0000000..6d31c4a
--- /dev/null
+++ b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt
@@ -0,0 +1,20 @@
+package com.onionsquad.bondoman.repository
+
+import com.onionsquad.bondoman.room.*
+import androidx.lifecycle.LiveData
+
+class TransactionRepository(private val transactionDao: TransactionDao) {
+    val listTransactions: LiveData<List<TransactionEntity>> = transactionDao.getAllTransactions()
+
+    suspend fun insertTransaction(transaction: TransactionEntity) {
+        transactionDao.insertTransaction(transaction)
+    }
+
+    suspend fun updateTransaction(transaction: TransactionEntity) {
+        transactionDao.updateTransaction(transaction)
+    }
+
+    suspend fun deleteTransaction(transaction: TransactionEntity) {
+        transactionDao.deleteTransaction(transaction)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
index bb883ea..a4e10ab 100644
--- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
@@ -1,13 +1,24 @@
 package com.onionsquad.bondoman.ui.transaction
 
 import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.launch
+import com.onionsquad.bondoman.room.*
+import com.onionsquad.bondoman.repository.TransactionRepository
 
-class TransactionViewModel : ViewModel() {
+class TransactionViewModel(private val repository : TransactionRepository) : ViewModel() {
+    var listTransactions: LiveData<List<TransactionEntity>> = repository.listTransactions
 
-    private val _text = MutableLiveData<String>().apply {
-        value = "This is dashboard Fragment"
+    fun insertTransaction(transaction: TransactionEntity) = viewModelScope.launch {
+        repository.insertTransaction(transaction)
+    }
+
+    fun updateTransaction(transaction: TransactionEntity) = viewModelScope.launch {
+        repository.updateTransaction(transaction)
+    }
+
+    fun deleteTransaction(transaction: TransactionEntity) = viewModelScope.launch {
+        repository.deleteTransaction(transaction)
     }
-    val text: LiveData<String> = _text
 }
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index a0985ef..56ccadd 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,4 +2,5 @@
 plugins {
     alias(libs.plugins.androidApplication) apply false
     alias(libs.plugins.jetbrainsKotlinAndroid) apply false
+    alias(libs.plugins.jetbrainsKotlinKapt) apply false
 }
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 20e2a01..68c91ae 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # Android operating system, and which are packaged with your app's APK
 # https://developer.android.com/topic/libraries/support-library/androidx-rn
 android.useAndroidX=true
+android.enableJetifier=true
 # Kotlin code style for this project: "official" or "obsolete":
 kotlin.code.style=official
 # Enables namespacing of each library's R class so that its R class includes only the
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 15e4421..0dfe940 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -13,6 +13,7 @@ lifecycleViewmodelKtx = "2.6.1"
 navigationFragmentKtx = "2.6.0"
 navigationUiKtx = "2.6.0"
 room = "2.6.1"
+kapt = "1.9.23"
 
 [libraries]
 androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -34,5 +35,5 @@ room-common = { group = "androidx.room", name = "room-common", version.ref = "ro
 [plugins]
 androidApplication = { id = "com.android.application", version.ref = "agp" }
 jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
-kotlinKapt = { id = "kotlin-kapt", version.ref = "kotlin" }
+jetbrainsKotlinKapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kapt" }
 
-- 
GitLab