From 04b8390f85f5eb8bc99f5538a8b2d026126f3f85 Mon Sep 17 00:00:00 2001
From: Eunice Sarah Siregar <13521013@mahasiswa.itb.ac.id>
Date: Sat, 30 Mar 2024 15:25:42 +0700
Subject: [PATCH] fix: get transaction

---
 .../java/com/example/bondoman/GraphPage.kt    |  8 ++++-
 .../java/com/example/bondoman/MainActivity.kt | 12 ++++++--
 .../java/com/example/bondoman/ScanPage.kt     |  8 +++--
 .../java/com/example/bondoman/SettingsPage.kt |  8 ++++-
 .../com/example/bondoman/TransactionPage.kt   | 14 +++++++--
 .../bondoman/room/TransactionRepository.kt    |  6 ++++
 .../room/TransactionRepositoryImplement.kt    | 30 +++++++++++++++++++
 7 files changed, 77 insertions(+), 9 deletions(-)
 create mode 100644 bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt
 create mode 100644 bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt

diff --git a/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt b/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt
index fc60c22..8293262 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt
@@ -10,6 +10,8 @@ import android.widget.ProgressBar
 import androidx.core.content.ContextCompat
 import androidx.lifecycle.lifecycleScope
 import com.example.bondoman.room.TransactionDB
+import com.example.bondoman.room.TransactionRepository
+import com.example.bondoman.room.TransactionRepositoryImplement
 import com.github.mikephil.charting.charts.PieChart
 import com.github.mikephil.charting.data.PieData
 import com.github.mikephil.charting.data.PieDataSet
@@ -23,6 +25,8 @@ class GraphPage : Fragment(R.layout.fragment_graph_page) {
     val db by lazy { TransactionDB(requireContext()) }
 
     lateinit var PieChart: GraphPage
+    private lateinit var transactionRepository: TransactionRepository
+
 
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
@@ -44,10 +48,12 @@ class GraphPage : Fragment(R.layout.fragment_graph_page) {
         pieChart.legend.isEnabled = false
 
         progressBarTumbas.max = 100
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext())
+        transactionRepository.setNIM()
 
         lifecycleScope.launch{
             val transaction = withContext(Dispatchers.IO){
-                db.transactionDao().getAllTransactions()
+                transactionRepository.getAllTransactions()
             }
             val entries = ArrayList<PieEntry>()
             transaction.forEach{
diff --git a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
index 4100d6d..384817d 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
@@ -15,6 +15,8 @@ import androidx.core.content.ContentProviderCompat.requireContext
 import com.example.bondoman.databinding.ActivityMainBinding
 import androidx.fragment.app.Fragment
 import com.example.bondoman.room.TransactionDB
+import com.example.bondoman.room.TransactionRepository
+import com.example.bondoman.room.TransactionRepositoryImplement
 import com.example.bondoman.utils.AuthManager
 import com.example.bondoman.utils.CheckExpiryToken
 import kotlinx.coroutines.CoroutineScope
@@ -26,7 +28,7 @@ import java.util.Base64
 class MainActivity : AppCompatActivity() {
     lateinit var binding: ActivityMainBinding
     private val db by lazy { TransactionDB(this) }
-
+    private lateinit var transactionRepository: TransactionRepository
 
     private val networkChangeReceiver = object : BroadcastReceiver() {
         override fun onReceive(context: Context?, intent: Intent?) {
@@ -88,9 +90,11 @@ class MainActivity : AppCompatActivity() {
     }
 
     private fun loadTransactions() {
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this)
+        transactionRepository.setNIM()
         CoroutineScope(Dispatchers.IO).launch {
             try {
-                val transc = db.transactionDao().getAllTransactions()
+                val transc = transactionRepository.getAllTransactions()
                 Log.d("MainActivity", "dbResponse: $transc")
             } catch (e: Exception) {
                 Log.e("MainActivity", "Error loading transactions: ${e.message}")
@@ -99,9 +103,11 @@ class MainActivity : AppCompatActivity() {
     }
 
     private fun loadCachedTransactions() {
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this)
+        transactionRepository.setNIM()
         CoroutineScope(Dispatchers.IO).launch {
             try {
-                val transc = db.transactionDao().getAllTransactions()
+                val transc = transactionRepository.getAllTransactions()
                 Log.d("MainActivity", "Cached transactions: $transc")
             } catch (e: Exception) {
                 Log.e("MainActivity", "Error loading cached transactions: ${e.message}")
diff --git a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
index dd98a7c..5342507 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
@@ -2,8 +2,11 @@ package com.example.bondoman
 
 import android.app.Activity
 import android.content.ContentValues
+import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
 import android.net.Uri
 import android.os.Build
 import android.os.Bundle
@@ -245,8 +248,7 @@ class ScanPage : Fragment() {
                             cleanedItems.add(newItem)
                         }
                         addToDatabase(cleanedItems)
-
-                    }
+                }
                 }
                 else {
                     val errorBody = response.errorBody()?.string()
@@ -319,6 +321,8 @@ class ScanPage : Fragment() {
         _binding = null
     }
 
+
+
     companion object {
         private val REQUIRED_PERMISSIONS =
             mutableListOf (
diff --git a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
index 17ee17c..04782cf 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
@@ -17,6 +17,8 @@ import androidx.core.content.FileProvider
 import androidx.lifecycle.lifecycleScope
 import com.example.bondoman.room.Transaction
 import com.example.bondoman.room.TransactionDB
+import com.example.bondoman.room.TransactionRepository
+import com.example.bondoman.room.TransactionRepositoryImplement
 import com.example.bondoman.utils.AuthManager
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -30,6 +32,8 @@ import java.util.Base64
 
 class SettingsPage : Fragment() {
     val db by lazy { TransactionDB(requireContext()) }
+    private lateinit var transactionRepository: TransactionRepository
+
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -119,9 +123,11 @@ class SettingsPage : Fragment() {
     }
 
     private fun export(format: String, send: Boolean){
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext())
+        transactionRepository.setNIM()
         lifecycleScope.launch {
             val transactions = withContext(Dispatchers.IO) {
-                db.transactionDao().getAllTransactions()
+                transactionRepository.getAllTransactions()
             }
             saveTransactionsToExcel(transactions, requireContext(), format, send)
 
diff --git a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
index 65c50d1..3230e47 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
@@ -18,6 +18,8 @@ import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.RecyclerView
 import com.example.bondoman.room.Transaction
 import com.example.bondoman.room.TransactionDB
+import com.example.bondoman.room.TransactionRepository
+import com.example.bondoman.room.TransactionRepositoryImplement
 import com.example.bondoman.utils.AuthManager
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -32,6 +34,8 @@ import java.util.Locale
 
 class TransactionPage : Fragment(R.layout.fragment_transaction_page), TransactionAdapter.EditTransactionListener {
     val db by lazy { TransactionDB(requireContext()) }
+    private lateinit var transactionRepository: TransactionRepository
+
 
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
@@ -53,13 +57,17 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio
 
         val recyclerViewHeight = (0.6 * height).toInt()
 
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext())
+        transactionRepository.setNIM()
+
+
         recyclerView.layoutParams.height = recyclerViewHeight
         recyclerView.requestLayout()
 
         lifecycleScope.launch {
             if (isNetworkAvailable()) {
                 val transactions = withContext(Dispatchers.IO) {
-                    db.transactionDao().getAllTransactions()
+                    transactionRepository.getAllTransactions()
                 }
 
                 val balance = saldo(transactions)
@@ -138,10 +146,12 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio
     }
 
     fun loadCachedTransactions() {
+        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext())
+        transactionRepository.setNIM()
         lifecycleScope.launch {
             try {
                 val transactions = withContext(Dispatchers.IO) {
-                    db.transactionDao().getAllTransactions()
+                    transactionRepository.getAllTransactions()
                 }
                 Log.d("TransactionPage", "Cached transactions: $transactions")
 
diff --git a/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt
new file mode 100644
index 0000000..8eb69a6
--- /dev/null
+++ b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt
@@ -0,0 +1,6 @@
+package com.example.bondoman.room
+
+interface TransactionRepository {
+    suspend fun getAllTransactions(): List<Transaction>
+    fun setNIM()
+}
\ No newline at end of file
diff --git a/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt
new file mode 100644
index 0000000..6c19df3
--- /dev/null
+++ b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt
@@ -0,0 +1,30 @@
+package com.example.bondoman.room
+
+import android.content.Context
+import android.util.Log
+import com.example.bondoman.utils.AuthManager
+import org.json.JSONObject
+import java.nio.charset.StandardCharsets
+import java.util.Base64
+
+class TransactionRepositoryImplement(private val transactionDao: TransactionDao, private val context: Context): TransactionRepository {
+    private var nimUser: String =""
+
+    override fun setNIM() {
+        nimUser = getUserNIMFromToken()
+    }
+    override suspend fun getAllTransactions(): List<Transaction> {
+        return transactionDao.getAllTransactions().filter { it.email == nimUser }
+    }
+    private fun getUserNIMFromToken(): String {
+        val token = AuthManager.getToken(context).toString().split('.')
+        if (token.size != 3) {
+            Log.e("TransactionRepository", "Invalid token format")
+            return ""
+        }
+
+        val payload = Base64.getUrlDecoder().decode(token[1])
+        val payloadJson = JSONObject(String(payload, StandardCharsets.UTF_8))
+        return  payloadJson.optString("nim")
+    }
+}
\ No newline at end of file
-- 
GitLab