diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 98f601ba4427b3266edc434b3b689167f3290ed9..33277ad0d3f61afe7bc371bec3ca0fc467a40cd9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -45,7 +45,12 @@ 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) + } \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt new file mode 100644 index 0000000000000000000000000000000000000000..35e64cc4e012610fb9739a15fc9e6a5132680f45 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt @@ -0,0 +1,19 @@ +package com.onionsquad.bondoman.room + +import androidx.room.* +import androidx.lifecycle.LiveData + +@Dao +interface TransactionDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertTransaction(transaction: TransactionEntity) + + @Query("SELECT * FROM transactions") + fun getAllTransactions(): LiveData<List<TransactionEntity>> + + @Update + suspend fun updateTransaction(transaction: TransactionEntity) + + @Delete + suspend fun deleteTransaction(transaction: TransactionEntity) +} \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDatabase.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDatabase.kt new file mode 100644 index 0000000000000000000000000000000000000000..dc1fa967766e53114c2fdc3893feff5bc23a4546 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDatabase.kt @@ -0,0 +1,29 @@ +package com.onionsquad.bondoman.room + +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import android.content.Context + + +@Database(entities = [TransactionEntity::class], version = 1) +abstract class TransactionDatabase : RoomDatabase() { + abstract fun transactionDao(): TransactionDao + + companion object { + @Volatile + private var instance: TransactionDatabase? = null + fun getInstance(context: Context): TransactionDatabase { + synchronized(this) { + if (instance == null) { + instance = Room.databaseBuilder( + context.applicationContext, + TransactionDatabase::class.java, + "transaction_database" + ).build() + } + return instance!! + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt new file mode 100644 index 0000000000000000000000000000000000000000..82452546f5f4802914ba8bbb2dbe51f700b2c5f2 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt @@ -0,0 +1,26 @@ +package com.onionsquad.bondoman.room + +import androidx.room.Entity +import androidx.room.PrimaryKey +import androidx.room.ColumnInfo + +@Entity(tableName = "transactions") +data class TransactionEntity( + @PrimaryKey(autoGenerate = true) + val id: Int = 0, + + @ColumnInfo(name = "title") + val title: String, + + @ColumnInfo(name = "amount") + val amount: Double, + + @ColumnInfo(name = "category") + val category: String, + + @ColumnInfo(name = "date") + val date: String, + + @ColumnInfo(name = "location") + val location: String +) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3441753224764706fc741a2309298b5f20ff6ad..15e4421badb4e472990662dffc110ea64118aa97 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.3.1" +agp = "8.2.2" kotlin = "1.9.0" coreKtx = "1.10.1" junit = "4.13.2" @@ -12,6 +12,7 @@ lifecycleLivedataKtx = "2.6.1" lifecycleViewmodelKtx = "2.6.1" navigationFragmentKtx = "2.6.0" navigationUiKtx = "2.6.0" +room = "2.6.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -25,8 +26,13 @@ androidx-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecy androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" } androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" } +room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } +room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } +room-common = { group = "androidx.room", name = "room-common", version.ref = "room" } [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" }