Skip to content

Commit 61eecc1

Browse files
authored
[FIX] Migrate TransactionDao calls to TransactionRepository part - 1 (Ivy-Apps#3228)
* [FIX] Migrate TransactionDao calls to TransactionRepository part - 1 * [FIX] Migrate TransactionDao calls to TransactionRepository part - 2 * [FIX 3132] Migrate TransactionDao calls to TransactionRepository part - 3 * [FIX 3132] Migration of TransactionDao to TransactionRepository * [FIX 3132] Fixing Unit Cases * [FIX 3132] Changes for FakeRepo, simplify by deletion * [FIX 3132] Changes for FakeRepo, simplify by deletion * [FIX 3132] Detekt Changes
1 parent cbee82f commit 61eecc1

File tree

22 files changed

+401
-119
lines changed

22 files changed

+401
-119
lines changed

screen/edit-transaction/src/main/java/com/ivy/transaction/EditTransactionViewModel.kt

+11-5
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,22 @@ import com.ivy.base.legacy.refreshWidget
1414
import com.ivy.base.model.TransactionType
1515
import com.ivy.data.db.dao.read.LoanDao
1616
import com.ivy.data.db.dao.read.SettingsDao
17-
import com.ivy.data.db.dao.write.WriteTransactionDao
1817
import com.ivy.data.model.Category
1918
import com.ivy.data.model.CategoryId
2019
import com.ivy.data.model.Tag
2120
import com.ivy.data.model.TagId
21+
import com.ivy.data.model.TransactionId
2222
import com.ivy.data.model.primitive.AssociationId
2323
import com.ivy.data.model.primitive.NotBlankTrimmedString
2424
import com.ivy.data.repository.CategoryRepository
2525
import com.ivy.data.repository.TagRepository
26+
import com.ivy.data.repository.TransactionRepository
2627
import com.ivy.data.repository.mapper.TagMapper
28+
import com.ivy.data.repository.mapper.TransactionMapper
2729
import com.ivy.domain.features.Features
2830
import com.ivy.legacy.data.EditTransactionDisplayLoan
2931
import com.ivy.legacy.datamodel.Account
30-
import com.ivy.legacy.datamodel.toEntity
32+
import com.ivy.legacy.datamodel.temp.toDomain
3133
import com.ivy.legacy.domain.deprecated.logic.AccountCreator
3234
import com.ivy.legacy.utils.computationThread
3335
import com.ivy.legacy.utils.convertUTCToLocal
@@ -100,7 +102,8 @@ class EditTransactionViewModel @Inject constructor(
100102
private val categoryRepository: CategoryRepository,
101103
private val trnByIdAct: TrnByIdAct,
102104
private val accountByIdAct: AccountByIdAct,
103-
private val transactionWriter: WriteTransactionDao,
105+
private val transactionRepo: TransactionRepository,
106+
private val transactionMapper: TransactionMapper,
104107
private val tagRepository: TagRepository,
105108
private val tagMapper: TagMapper,
106109
private val features: Features
@@ -595,7 +598,7 @@ class EditTransactionViewModel @Inject constructor(
595598
viewModelScope.launch {
596599
ioThread {
597600
loadedTransaction?.let {
598-
transactionWriter.flagDeleted(it.id)
601+
transactionRepo.deleteById(TransactionId(it.id))
599602
}
600603
closeScreen()
601604
}
@@ -706,7 +709,10 @@ class EditTransactionViewModel @Inject constructor(
706709
accountsChanged = false
707710
}
708711

709-
transactionWriter.save(loadedTransaction().toEntity())
712+
loadedTransaction().toDomain(transactionMapper)?.let {
713+
transactionRepo.save(it)
714+
}
715+
710716
refreshWidget(WalletBalanceWidgetReceiver::class.java)
711717
}
712718

screen/home/src/main/java/com/ivy/home/customerjourney/CustomerJourneyCardsProvider.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.ivy.base.legacy.SharedPrefs
44
import com.ivy.base.legacy.stringRes
55
import com.ivy.base.model.TransactionType
66
import com.ivy.data.db.dao.read.PlannedPaymentRuleDao
7-
import com.ivy.data.db.dao.read.TransactionDao
7+
import com.ivy.data.repository.TransactionRepository
88
import com.ivy.design.l0_system.Blue
99
import com.ivy.design.l0_system.Blue3
1010
import com.ivy.design.l0_system.Gradient
@@ -25,14 +25,14 @@ import javax.inject.Inject
2525

2626
@Deprecated("Legacy code")
2727
class CustomerJourneyCardsProvider @Inject constructor(
28-
private val transactionDao: TransactionDao,
28+
private val transactionRepository: TransactionRepository,
2929
private val plannedPaymentRuleDao: PlannedPaymentRuleDao,
3030
private val sharedPrefs: SharedPrefs,
3131
private val ivyContext: IvyWalletCtx
3232
) {
3333

3434
suspend fun loadCards(): List<CustomerJourneyCardModel> {
35-
val trnCount = transactionDao.countHappenedTransactions()
35+
val trnCount = transactionRepository.countHappenedTransactions().value
3636
val plannedPaymentsCount = plannedPaymentRuleDao.countPlannedPayments()
3737

3838
return ACTIVE_CARDS

screen/import-data/src/main/java/com/ivy/importdata/csv/domain/CSVImporterV2.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.ivy.data.backup.CSVRow
88
import com.ivy.data.backup.ImportResult
99
import com.ivy.data.db.dao.read.AccountDao
1010
import com.ivy.data.db.dao.read.SettingsDao
11-
import com.ivy.data.db.dao.write.WriteTransactionDao
1211
import com.ivy.data.model.Category
1312
import com.ivy.data.model.CategoryId
1413
import com.ivy.data.model.primitive.ColorInt
@@ -17,6 +16,8 @@ import com.ivy.data.model.primitive.NotBlankTrimmedString
1716
import com.ivy.data.repository.AccountRepository
1817
import com.ivy.data.repository.CategoryRepository
1918
import com.ivy.data.repository.CurrencyRepository
19+
import com.ivy.data.repository.TransactionRepository
20+
import com.ivy.data.repository.mapper.TransactionMapper
2021
import com.ivy.design.IVY_COLOR_PICKER_COLORS_FREE
2122
import com.ivy.importdata.csv.ImportantFields
2223
import com.ivy.importdata.csv.OptionalFields
@@ -38,7 +39,8 @@ import com.ivy.importdata.csv.CSVRow as CSVRowNew
3839

3940
class CSVImporterV2 @Inject constructor(
4041
private val settingsDao: SettingsDao,
41-
private val transactionWriter: WriteTransactionDao,
42+
private val transactionRepository: TransactionRepository,
43+
private val transactionMapper: TransactionMapper,
4244
private val accountDao: AccountDao,
4345
private val categoryRepository: CategoryRepository,
4446
private val currencyRepository: CurrencyRepository,
@@ -108,7 +110,11 @@ class CSVImporterV2 @Inject constructor(
108110
0.0
109111
}
110112
onProgress(0.5 + progressPercent / 2)
111-
transactionWriter.save(transaction.toEntity())
113+
with(transactionMapper) {
114+
transaction.toEntity().toDomain().getOrNull()?.let {
115+
transactionRepository.save(it)
116+
}
117+
}
112118
}
113119

114120
return ImportResult(

screen/loans/src/main/java/com/ivy/loans/loandetails/LoanDetailsViewModel.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import com.ivy.base.legacy.Transaction
1010
import com.ivy.base.model.LoanRecordType
1111
import com.ivy.data.db.dao.read.LoanRecordDao
1212
import com.ivy.data.db.dao.read.SettingsDao
13-
import com.ivy.data.db.dao.read.TransactionDao
13+
import com.ivy.data.repository.TransactionRepository
14+
import com.ivy.data.repository.mapper.TransactionMapper
1415
import com.ivy.frp.test.TestIdlingResource
1516
import com.ivy.legacy.datamodel.Account
1617
import com.ivy.legacy.datamodel.Loan
1718
import com.ivy.legacy.datamodel.LoanRecord
19+
import com.ivy.legacy.datamodel.temp.toLegacy
1820
import com.ivy.legacy.datamodel.temp.toLegacyDomain
1921
import com.ivy.legacy.domain.deprecated.logic.AccountCreator
2022
import com.ivy.legacy.utils.computationThread
@@ -52,7 +54,8 @@ class LoanDetailsViewModel @Inject constructor(
5254
private val loanCreator: LoanCreator,
5355
private val loanRecordCreator: LoanRecordCreator,
5456
private val settingsDao: SettingsDao,
55-
private val transactionDao: TransactionDao,
57+
private val transactionRepository: TransactionRepository,
58+
private val transactionMapper: TransactionMapper,
5659
private val accountCreator: AccountCreator,
5760
private val loanTransactionsLogic: LoanTransactionsLogic,
5861
private val nav: Navigation,
@@ -247,7 +250,7 @@ class LoanDetailsViewModel @Inject constructor(
247250
displayLoanRecords.value =
248251
ioThread { loanRecordDao.findAllByLoanId(loanId = loanId) }.map {
249252
val trans = ioThread {
250-
transactionDao.findLoanRecordTransaction(
253+
transactionRepository.findLoanRecordTransaction(
251254
it.id
252255
)
253256
}
@@ -307,7 +310,9 @@ class LoanDetailsViewModel @Inject constructor(
307310
}
308311

309312
associatedTransaction = ioThread {
310-
transactionDao.findLoanTransaction(loanId = loan.value!!.id)?.toLegacyDomain()
313+
transactionRepository.findLoanTransaction(loanId = loan.value!!.id).let {
314+
it?.toLegacy(transactionMapper)
315+
}
311316
}
312317

313318
associatedTransaction?.let {

screen/planned-payments/src/main/java/com/ivy/planned/edit/EditPlannedViewModel.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import com.ivy.data.db.dao.read.AccountDao
1010
import com.ivy.data.db.dao.read.PlannedPaymentRuleDao
1111
import com.ivy.data.db.dao.read.SettingsDao
1212
import com.ivy.data.db.dao.write.WritePlannedPaymentRuleDao
13-
import com.ivy.data.db.dao.write.WriteTransactionDao
1413
import com.ivy.data.model.Category
1514
import com.ivy.data.model.CategoryId
1615
import com.ivy.data.model.IntervalType
1716
import com.ivy.data.repository.CategoryRepository
17+
import com.ivy.data.repository.TransactionRepository
1818
import com.ivy.legacy.datamodel.Account
1919
import com.ivy.legacy.datamodel.PlannedPaymentRule
2020
import com.ivy.legacy.datamodel.temp.toLegacyDomain
@@ -52,7 +52,7 @@ class EditPlannedViewModel @Inject constructor(
5252
private val accountCreator: AccountCreator,
5353
private val accountsAct: AccountsAct,
5454
private val plannedPaymentRuleWriter: WritePlannedPaymentRuleDao,
55-
private val transactionWriter: WriteTransactionDao,
55+
private val transactionRepository: TransactionRepository
5656
) : ComposeViewModel<EditPlannedScreenState, EditPlannedScreenEvent>() {
5757

5858
private val transactionType = mutableStateOf(TransactionType.INCOME)
@@ -466,8 +466,8 @@ class EditPlannedViewModel @Inject constructor(
466466
deleteTransactionModalVisible.value = false
467467
ioThread {
468468
loadedRule?.let {
469-
plannedPaymentRuleWriter.flagDeleted(it.id)
470-
transactionWriter.flagDeletedByRecurringRuleIdAndNoDateTime(
469+
plannedPaymentRuleWriter.deleteById(it.id)
470+
transactionRepository.flagDeletedByRecurringRuleIdAndNoDateTime(
471471
recurringRuleId = it.id
472472
)
473473
}

screen/transactions/src/main/java/com/ivy/transactions/TransactionsViewModel.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import com.ivy.base.model.TransactionType
1515
import com.ivy.data.db.dao.read.AccountDao
1616
import com.ivy.data.db.dao.write.WriteCategoryDao
1717
import com.ivy.data.db.dao.write.WritePlannedPaymentRuleDao
18-
import com.ivy.data.db.dao.write.WriteTransactionDao
1918
import com.ivy.data.model.AccountId
2019
import com.ivy.data.model.Category
2120
import com.ivy.data.model.CategoryId
@@ -25,6 +24,7 @@ import com.ivy.data.model.primitive.NotBlankTrimmedString
2524
import com.ivy.data.repository.AccountRepository
2625
import com.ivy.data.repository.CategoryRepository
2726
import com.ivy.data.repository.TagRepository
27+
import com.ivy.data.repository.TransactionRepository
2828
import com.ivy.data.repository.mapper.TransactionMapper
2929
import com.ivy.design.l0_system.RedLight
3030
import com.ivy.frp.then
@@ -89,7 +89,7 @@ class TransactionsViewModel @Inject constructor(
8989
private val calcAccIncomeExpenseAct: CalcAccIncomeExpenseAct,
9090
private val calcTrnsIncomeExpenseAct: LegacyCalcTrnsIncomeExpenseAct,
9191
private val exchangeAct: ExchangeAct,
92-
private val transactionWriter: WriteTransactionDao,
92+
private val transactionRepository: TransactionRepository,
9393
private val categoryWriter: WriteCategoryDao,
9494
private val plannedPaymentRuleWriter: WritePlannedPaymentRuleDao,
9595
private val transactionMapper: TransactionMapper,
@@ -728,7 +728,7 @@ class TransactionsViewModel @Inject constructor(
728728

729729
private suspend fun deleteAccount(accountId: UUID) {
730730
ioThread {
731-
transactionWriter.flagDeletedByAccountId(accountId = accountId)
731+
transactionRepository.flagDeletedByAccountId(accountId = accountId)
732732
plannedPaymentRuleWriter.flagDeletedByAccountId(accountId = accountId)
733733
accountRepository.deleteById(AccountId(accountId))
734734

shared/data/core/src/androidTest/java/com/ivy/data/backup/BackupDataUseCaseAndroidTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import androidx.room.Room
77
import androidx.test.core.app.ApplicationProvider
88
import androidx.test.ext.junit.runners.AndroidJUnit4
99
import androidx.test.platform.app.InstrumentationRegistry
10+
import com.ivy.base.TestDispatchersProvider
1011
import com.ivy.base.di.KotlinxSerializationModule
1112
import com.ivy.base.legacy.SharedPrefs
13+
import com.ivy.data.DataObserver
1214
import com.ivy.data.db.IvyRoomDatabase
1315
import com.ivy.data.file.FileSystem
1416
import com.ivy.data.repository.fake.FakeAccountRepository
1517
import com.ivy.data.repository.fake.FakeCurrencyRepository
1618
import com.ivy.data.repository.mapper.AccountMapper
17-
import com.ivy.base.TestDispatchersProvider
18-
import com.ivy.data.DataObserver
1919
import io.kotest.matchers.collections.shouldBeEmpty
2020
import io.kotest.matchers.ints.shouldBeGreaterThan
2121
import kotlinx.coroutines.runBlocking
@@ -45,6 +45,7 @@ class BackupDataUseCaseAndroidTest {
4545
plannedPaymentRuleDao = db.plannedPaymentRuleDao,
4646
settingsDao = db.settingsDao,
4747
transactionDao = db.transactionDao,
48+
transactionWriter = db.writeTransactionDao,
4849
sharedPrefs = SharedPrefs(appContext),
4950
accountRepository = FakeAccountRepository(
5051
accountDao = db.accountDao,
@@ -59,7 +60,6 @@ class BackupDataUseCaseAndroidTest {
5960
)
6061
),
6162
categoryWriter = db.writeCategoryDao,
62-
transactionWriter = db.writeTransactionDao,
6363
settingsWriter = db.writeSettingsDao,
6464
budgetWriter = db.writeBudgetDao,
6565
loanWriter = db.writeLoanDao,

shared/data/core/src/main/java/com/ivy/data/backup/BackupDataUseCase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ class BackupDataUseCase @Inject constructor(
4848
private val plannedPaymentRuleDao: PlannedPaymentRuleDao,
4949
private val settingsDao: SettingsDao,
5050
private val transactionDao: TransactionDao,
51+
private val transactionWriter: WriteTransactionDao,
5152
private val sharedPrefs: SharedPrefs,
5253
private val accountRepository: AccountRepository,
5354
private val accountMapper: AccountMapper,
5455
private val categoryWriter: WriteCategoryDao,
55-
private val transactionWriter: WriteTransactionDao,
5656
private val settingsWriter: WriteSettingsDao,
5757
private val budgetWriter: WriteBudgetDao,
5858
private val loanWriter: WriteLoanDao,

shared/data/core/src/main/java/com/ivy/data/repository/TransactionRepository.kt

+50
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.ivy.data.repository
22

3+
import com.ivy.base.model.TransactionType
34
import com.ivy.data.model.AccountId
45
import com.ivy.data.model.CategoryId
56
import com.ivy.data.model.Expense
67
import com.ivy.data.model.Income
78
import com.ivy.data.model.Transaction
89
import com.ivy.data.model.TransactionId
910
import com.ivy.data.model.Transfer
11+
import com.ivy.data.model.primitive.NonNegativeLong
1012
import java.time.LocalDateTime
13+
import java.util.UUID
1114

1215
interface TransactionRepository {
1316
suspend fun findById(id: TransactionId): Transaction?
@@ -23,40 +26,87 @@ interface TransactionRepository {
2326
startDate: LocalDateTime,
2427
endDate: LocalDateTime
2528
): List<Transaction>
29+
2630
suspend fun findAllByAccountAndBetween(
2731
accountId: AccountId,
2832
startDate: LocalDateTime,
2933
endDate: LocalDateTime
3034
): List<Transaction>
35+
3136
suspend fun findAllToAccountAndBetween(
3237
toAccountId: AccountId,
3338
startDate: LocalDateTime,
3439
endDate: LocalDateTime
3540
): List<Transaction>
41+
3642
suspend fun findAllDueToBetween(
3743
startDate: LocalDateTime,
3844
endDate: LocalDateTime
3945
): List<Transaction>
46+
4047
suspend fun findAllDueToBetweenByCategory(
4148
startDate: LocalDateTime,
4249
endDate: LocalDateTime,
4350
categoryId: CategoryId
4451
): List<Transaction>
52+
4553
suspend fun findAllDueToBetweenByCategoryUnspecified(
4654
startDate: LocalDateTime,
4755
endDate: LocalDateTime,
4856
): List<Transaction>
57+
4958
suspend fun findAllDueToBetweenByAccount(
5059
startDate: LocalDateTime,
5160
endDate: LocalDateTime,
5261
accountId: AccountId
5362
): List<Transaction>
5463

64+
suspend fun findAllByCategoryAndTypeAndBetween(
65+
categoryId: UUID,
66+
type: TransactionType,
67+
startDate: LocalDateTime,
68+
endDate: LocalDateTime
69+
): List<Transaction>
70+
71+
suspend fun findAllUnspecifiedAndTypeAndBetween(
72+
type: TransactionType,
73+
startDate: LocalDateTime,
74+
endDate: LocalDateTime
75+
): List<Transaction>
76+
77+
suspend fun findAllUnspecifiedAndBetween(
78+
startDate: LocalDateTime,
79+
endDate: LocalDateTime
80+
): List<Transaction>
81+
82+
suspend fun findAllByCategoryAndBetween(
83+
categoryId: UUID,
84+
startDate: LocalDateTime,
85+
endDate: LocalDateTime
86+
): List<Transaction>
87+
88+
suspend fun findAllByRecurringRuleId(recurringRuleId: UUID): List<Transaction>
89+
suspend fun flagDeletedByAccountId(accountId: UUID)
90+
5591
suspend fun save(value: Transaction)
5692
suspend fun saveMany(value: List<Transaction>)
5793

5894
suspend fun flagDeleted(id: TransactionId)
95+
suspend fun flagDeletedByRecurringRuleIdAndNoDateTime(recurringRuleId: UUID)
5996
suspend fun deleteById(id: TransactionId)
6097
suspend fun deleteAllByAccountId(accountId: AccountId)
6198
suspend fun deleteAll()
99+
100+
suspend fun countHappenedTransactions(): NonNegativeLong
101+
suspend fun findLoanTransaction(
102+
loanId: UUID
103+
): Transaction?
104+
105+
suspend fun findLoanRecordTransaction(
106+
loanRecordId: UUID
107+
): Transaction?
108+
109+
suspend fun findAllByLoanId(
110+
loanId: UUID
111+
): List<Transaction>
62112
}

0 commit comments

Comments
 (0)