diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 5ed85a93b6..66f9a189dc 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -42,6 +42,8 @@ kotlin { sourceSets { commonMain.dependencies { + api(projects.core.model) + implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.serialization.json) api(libs.coil.kt) @@ -52,6 +54,8 @@ kotlin { api(libs.squareup.okio) api(libs.jb.kotlin.stdlib) api(libs.kotlinx.datetime) + + implementation(libs.ktor.client.core) } androidMain.dependencies { diff --git a/core/common/src/commonMain/kotlin/com/mifos/core/common/utils/MFErrorParser.kt b/core/common/src/commonMain/kotlin/com/mifos/core/common/utils/MFErrorParser.kt new file mode 100644 index 0000000000..d48b5491a5 --- /dev/null +++ b/core/common/src/commonMain/kotlin/com/mifos/core/common/utils/MFErrorParser.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2025 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.common.utils + +import com.mifos.core.model.objects.error.MifosError +import io.ktor.client.plugins.ClientRequestException +import io.ktor.client.plugins.ServerResponseException +import io.ktor.client.statement.bodyAsText +import kotlinx.serialization.json.Json + +object MFErrorParser { + const val LOG_TAG: String = "MFErrorParser" + + private val json: Json = Json { ignoreUnknownKeys = true } + + private fun parseError(serverResponse: String?): MifosError { + return json.decodeFromString(serverResponse ?: "{}") + } + + suspend fun errorMessage(throwableError: Throwable): String { + return try { + when (throwableError) { + is ClientRequestException, is ServerResponseException -> { + val response = (throwableError as? ClientRequestException)?.response + ?: (throwableError as? ServerResponseException)?.response + val errorBody = response?.bodyAsText() ?: "" + parseError(errorBody).errors.firstOrNull()?.defaultUserMessage + ?: "Something went wrong!" + } + + else -> throwableError.message ?: "Unknown error" + } + } catch (exception: Exception) { + "Error processing response" + } + } +} diff --git a/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/CheckerInboxTasksRepository.kt b/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/CheckerInboxTasksRepository.kt index bf793e45dd..2e47c5154d 100644 --- a/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/CheckerInboxTasksRepository.kt +++ b/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/CheckerInboxTasksRepository.kt @@ -22,7 +22,7 @@ interface CheckerInboxTasksRepository { fun getRescheduleLoansTaskList(): Flow>> - suspend fun getCheckerTaskList( + fun getCheckerTaskList( actionName: String? = null, entityName: String? = null, resourceId: Int? = null, diff --git a/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/ClientDetailsRepository.kt b/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/ClientDetailsRepository.kt index 723b27e6a7..c209c30bc5 100644 --- a/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/ClientDetailsRepository.kt +++ b/core/data/src/commonMain/kotlin/com/mifos/core/data/repository/ClientDetailsRepository.kt @@ -11,14 +11,13 @@ package com.mifos.core.data.repository import com.mifos.room.entities.accounts.ClientAccounts import com.mifos.room.entities.client.ClientEntity -import io.ktor.http.content.PartData /** * Created by Aditya Gupta on 06/08/23. */ interface ClientDetailsRepository { - suspend fun uploadClientImage(id: Int, file: PartData) + suspend fun uploadClientImage(clientId: Int, image: String) suspend fun deleteClientImage(clientId: Int) diff --git a/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/CheckerInboxTasksRepositoryImp.kt b/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/CheckerInboxTasksRepositoryImp.kt index a41baf13b2..c6465922ed 100644 --- a/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/CheckerInboxTasksRepositoryImp.kt +++ b/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/CheckerInboxTasksRepositoryImp.kt @@ -30,7 +30,7 @@ class CheckerInboxTasksRepositoryImp( .asDataStateFlow() } - override suspend fun getCheckerTaskList( + override fun getCheckerTaskList( actionName: String?, entityName: String?, resourceId: Int?, diff --git a/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/ClientDetailsRepositoryImp.kt b/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/ClientDetailsRepositoryImp.kt index d223393c78..3e59cf0452 100644 --- a/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/ClientDetailsRepositoryImp.kt +++ b/core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/ClientDetailsRepositoryImp.kt @@ -13,7 +13,6 @@ import com.mifos.core.data.repository.ClientDetailsRepository import com.mifos.core.network.datamanager.DataManagerClient import com.mifos.room.entities.accounts.ClientAccounts import com.mifos.room.entities.client.ClientEntity -import io.ktor.http.content.PartData /** * Created by Aditya Gupta on 06/08/23. @@ -22,8 +21,11 @@ class ClientDetailsRepositoryImp( private val dataManagerClient: DataManagerClient, ) : ClientDetailsRepository { - override suspend fun uploadClientImage(id: Int, file: PartData) { - dataManagerClient.uploadClientImage(id, file) + override suspend fun uploadClientImage(clientId: Int, image: String) { + dataManagerClient.uploadClientImage( + clientId = clientId, + typedFile = "data:image/png;base64,$image", + ) } override suspend fun deleteClientImage(clientId: Int) { diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts index abe4e3a6a2..715b3be052 100644 --- a/core/domain/build.gradle.kts +++ b/core/domain/build.gradle.kts @@ -8,37 +8,53 @@ * See https://github.com/openMF/android-client/blob/master/LICENSE.md */ plugins { - alias(libs.plugins.mifos.android.library) - alias(libs.plugins.mifos.android.library.jacoco) - alias(libs.plugins.mifos.android.koin) -// alias(libs.plugins.mifos.android.hilt) + alias(libs.plugins.mifos.kmp.library) + alias(libs.plugins.mifos.kmp.koin) + alias(libs.plugins.jetbrainsCompose) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotlin.serialization) } android { namespace = "com.mifos.core.domain" } -dependencies { - api(projects.core.data) - api(projects.core.model) - - implementation(libs.javax.inject) - - implementation(libs.dbflow) - - // sdk client -// implementation(libs.fineract.client) - - implementation(libs.rxandroid) - implementation(libs.rxjava) - - implementation(libs.squareup.okhttp) - - implementation(libs.androidx.paging.runtime.ktx) - - testImplementation(projects.core.testing) - testImplementation (libs.androidx.paging.common.ktx) - testImplementation (libs.androidx.paging.testing) +kotlin { + sourceSets { + commonMain.dependencies { + api(projects.core.data) + api(projects.core.model) + api(projects.core.common) + api(projects.core.network) + + implementation(libs.kotlinx.coroutines.core) + implementation(compose.components.resources) + implementation(libs.kotlinx.serialization.json) + // implementation(libs.fineract.client.kmp) + } + + androidMain.dependencies { + implementation(libs.squareup.okhttp) + implementation(libs.ktor.client.okhttp) + implementation(libs.androidx.paging.runtime.ktx) + } + nativeMain.dependencies { + implementation(libs.ktor.client.darwin) + } + desktopMain.dependencies { + implementation(libs.ktor.client.okhttp) + } + jsMain.dependencies { + implementation(libs.ktor.client.js) + } + wasmJsMain.dependencies { + implementation(libs.ktor.client.js) + } + } +} - implementation(libs.kotlinx.serialization.json) +compose.resources { + publicResClass = true + generateResClass = always + packageOfResClass = "core.domain.generated.resources" } \ No newline at end of file diff --git a/core/domain/src/main/AndroidManifest.xml b/core/domain/src/androidMain/AndroidManifest.xml similarity index 100% rename from core/domain/src/main/AndroidManifest.xml rename to core/domain/src/androidMain/AndroidManifest.xml diff --git a/core/domain/src/main/res/values/string.xml b/core/domain/src/commonMain/composeResources/values/string.xml similarity index 100% rename from core/domain/src/main/res/values/string.xml rename to core/domain/src/commonMain/composeResources/values/string.xml diff --git a/core/domain/src/main/java/com/mifos/core/domain/di/UseCaseModule.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/di/UseCaseModule.kt similarity index 100% rename from core/domain/src/main/java/com/mifos/core/domain/di/UseCaseModule.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/di/UseCaseModule.kt diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt similarity index 63% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt index a814c366bf..81c7253e33 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateCenterUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ActivateRepository import com.mifos.core.model.objects.clients.ActivatePayload import com.mifos.core.network.model.PostCentersCenterIdResponse @@ -20,16 +21,10 @@ class ActivateCenterUseCase( private val activateRepository: ActivateRepository, ) { - suspend operator fun invoke( + operator fun invoke( centerId: Int, centerPayload: ActivatePayload, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = activateRepository.activateCenter(centerId, centerPayload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(activateRepository.activateCenter(centerId, centerPayload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateClientUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateClientUseCase.kt similarity index 63% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateClientUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateClientUseCase.kt index 38060b92fb..c0682a0ae9 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateClientUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateClientUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ActivateRepository import com.mifos.core.model.objects.clients.ActivatePayload import com.mifos.core.network.model.PostClientsClientIdResponse @@ -20,16 +21,10 @@ class ActivateClientUseCase( private val activateRepository: ActivateRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, clientPayload: ActivatePayload, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = activateRepository.activateClient(clientId, clientPayload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(activateRepository.activateClient(clientId, clientPayload)) + }.asDataStateFlow() } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt new file mode 100644 index 0000000000..2c27615b62 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.ActivateRepository +import com.mifos.core.model.objects.clients.ActivatePayload +import com.mifos.core.network.GenericResponse +import kotlinx.coroutines.flow.Flow + +class ActivateGroupUseCase( + private val activateRepository: ActivateRepository, +) { + + operator fun invoke( + groupId: Int, + groupPayload: ActivatePayload, + ): Flow> = + activateRepository.activateGroup(groupId, groupPayload) +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt new file mode 100644 index 0000000000..1c151dbc45 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountActivateRepository +import com.mifos.core.network.GenericResponse +import kotlinx.coroutines.flow.Flow + +/** + * Created by Pronay Sarker on 04/08/2024 (12:33 PM) + */ +class ActivateSavingsUseCase( + private val repository: SavingsAccountActivateRepository, +) { + + operator fun invoke( + savingsAccountId: Int, + request: HashMap, + ): Flow> = + repository.activateSavings(savingsAccountId, request) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt similarity index 57% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt index 0609d8c229..dbc87ec009 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddClientPinpointLocationUseCase.kt @@ -9,8 +9,10 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.PinPointClientRepository +import com.mifos.core.model.objects.clients.ClientAddressRequest import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -19,16 +21,10 @@ class AddClientPinpointLocationUseCase( private val pinPointClientRepository: PinPointClientRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, - address: com.mifos.core.model.objects.clients.ClientAddressRequest, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = pinPointClientRepository.addClientPinpointLocation(clientId, address) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + address: ClientAddressRequest, + ): Flow> = flow { + emit(pinPointClientRepository.addClientPinpointLocation(clientId, address)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt similarity index 63% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt index 5769988582..06239028c7 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/AddDataTableEntryUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.DataTableRowDialogRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,17 +20,11 @@ class AddDataTableEntryUseCase( private val repository: DataTableRowDialogRepository, ) { - suspend operator fun invoke( + operator fun invoke( table: String, entityId: Int, payload: Map, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.addDataTableEntry(table, entityId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.addDataTableEntry(table, entityId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt index 98870d27fd..7ece6df411 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveCheckerUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.CheckerInboxRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,13 +20,7 @@ class ApproveCheckerUseCase( val repository: CheckerInboxRepository, ) { - suspend operator fun invoke(auditId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.approveCheckerEntry(auditId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(auditId: Int): Flow> = flow { + emit(repository.approveCheckerEntry(auditId)) + }.asDataStateFlow() } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt new file mode 100644 index 0000000000..89338ed786 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountApprovalRepository +import com.mifos.core.model.objects.account.loan.SavingsApproval +import com.mifos.core.network.GenericResponse +import kotlinx.coroutines.flow.Flow + +/** + * Created by Pronay Sarker on 04/08/2024 (12:46 PM) + */ +class ApproveSavingsApplicationUseCase( + private val repository: SavingsAccountApprovalRepository, +) { + + operator fun invoke( + savingsAccountId: Int, + savingsApproval: SavingsApproval?, + ): Flow> = + repository.approveSavingsApplication( + savingsAccountId, + savingsApproval, + ) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateChargesUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateChargesUseCase.kt similarity index 64% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/CreateChargesUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateChargesUseCase.kt index 40f9afb98f..6993bf36d7 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateChargesUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateChargesUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ChargeDialogRepository import com.mifos.core.model.objects.clients.ChargeCreationResponse import com.mifos.core.model.objects.payloads.ChargesPayload @@ -20,16 +21,10 @@ class CreateChargesUseCase( private val repository: ChargeDialogRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, payload: ChargesPayload, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.createCharges(clientId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.createCharges(clientId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt similarity index 65% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt index 0d01913e88..c9075941ef 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateClientIdentifierUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ClientIdentifierDialogRepository import com.mifos.core.model.objects.noncoreobjects.IdentifierCreationResponse import com.mifos.core.model.objects.noncoreobjects.IdentifierPayload @@ -20,16 +21,10 @@ class CreateClientIdentifierUseCase( private val repository: ClientIdentifierDialogRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, identifierPayload: IdentifierPayload, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.createClientIdentifier(clientId, identifierPayload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.createClientIdentifier(clientId, identifierPayload)) + }.asDataStateFlow() } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt new file mode 100644 index 0000000000..149c347c1c --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SignatureRepository +import com.mifos.core.network.GenericResponse +import io.ktor.http.content.PartData +import kotlinx.coroutines.flow.Flow + +class CreateDocumentUseCase( + private val repository: SignatureRepository, +) { + + operator fun invoke( + entityType: String, + entityId: Int, + name: String, + desc: String, + file: PartData, + ): Flow> = + repository.createDocument(entityType, entityId, name, desc, file) +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt new file mode 100644 index 0000000000..10930a9897 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.GroupLoanAccountRepository +import com.mifos.core.model.objects.payloads.GroupLoanPayload +import com.mifos.room.entities.accounts.loans.Loan +import kotlinx.coroutines.flow.Flow + +class CreateGroupLoansAccountUseCase( + private val repository: GroupLoanAccountRepository, +) { + + operator fun invoke( + loansPayload: GroupLoanPayload, + ): Flow> = + repository.createGroupLoansAccount(loansPayload) +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt new file mode 100644 index 0000000000..4248a44b5a --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.LoanAccountRepository +import com.mifos.core.network.model.LoansPayload +import com.mifos.room.entities.accounts.loans.Loan +import kotlinx.coroutines.flow.Flow + +class CreateLoanAccountUseCase( + private val loanAccountRepository: LoanAccountRepository, +) { + + operator fun invoke(loansPayload: LoansPayload): Flow> = + loanAccountRepository.createLoansAccount(loansPayload) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt similarity index 64% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt index 47432ad3d2..97506b8d4e 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateLoanChargesUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.LoanChargeDialogRepository import com.mifos.core.model.objects.clients.ChargeCreationResponse import com.mifos.core.model.objects.payloads.ChargesPayload @@ -20,16 +21,10 @@ class CreateLoanChargesUseCase( private val repository: LoanChargeDialogRepository, ) { - suspend operator fun invoke( + operator fun invoke( loanId: Int, chargesPayload: ChargesPayload, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.createLoanCharges(loanId, chargesPayload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.createLoanCharges(loanId, chargesPayload)) + }.asDataStateFlow() } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt new file mode 100644 index 0000000000..0814906894 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountRepository +import com.mifos.core.model.objects.payloads.SavingsPayload +import com.mifos.room.entities.client.Savings +import kotlinx.coroutines.flow.Flow + +/** + * Created by Pronay Sarker on 04/08/2024 (12:19 PM) + */ + +class CreateSavingsAccountUseCase( + private val repository: SavingsAccountRepository, +) { + + operator fun invoke(savingsPayload: SavingsPayload?): Flow> = + repository.createSavingsAccount(savingsPayload) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt index c7973319e5..edbd733ebb 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteCheckerUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.CheckerInboxRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,13 +20,7 @@ class DeleteCheckerUseCase( private val repository: CheckerInboxRepository, ) { - operator fun invoke(auditId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.deleteCheckerEntry(auditId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(auditId: Int): Flow> = flow { + emit(repository.deleteCheckerEntry(auditId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt index f312e4f50c..369a6f9981 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteClientAddressPinpointUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.PinPointClientRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,17 +20,13 @@ class DeleteClientAddressPinpointUseCase( private val pinPointClientRepository: PinPointClientRepository, ) { - suspend operator fun invoke(clientId: Int, addressId: Int): Flow> = + operator fun invoke(clientId: Int, addressId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = pinPointClientRepository.deleteClientAddressPinpointLocation( + emit( + pinPointClientRepository.deleteClientAddressPinpointLocation( clientId, addressId, - ) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ), + ) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt similarity index 54% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt index 16abd115fc..5b9a06faf9 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteDataTableEntryUseCase.kt @@ -9,27 +9,22 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.DataTableDataRepository +import com.mifos.core.network.model.DeleteDataTablesDatatableAppTableIdDatatableIdResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import org.openapitools.client.models.DeleteDataTablesDatatableAppTableIdDatatableIdResponse class DeleteDataTableEntryUseCase( private val repository: DataTableDataRepository, ) { - suspend operator fun invoke( + operator fun invoke( table: String, entity: Int, rowId: Int, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.deleteDataTableEntry(table, entity, rowId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.deleteDataTableEntry(table, entity, rowId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt similarity index 52% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt index d638fe8302..5d25146b07 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DeleteIdentifierUseCase.kt @@ -9,27 +9,21 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ClientIdentifiersRepository +import com.mifos.core.network.model.DeleteClientsClientIdIdentifiersIdentifierIdResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import org.openapitools.client.models.DeleteClientsClientIdIdentifiersIdentifierIdResponse class DeleteIdentifierUseCase( private val repository: ClientIdentifiersRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, identifierId: Int, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = - repository.deleteClientIdentifier(clientId = clientId, identifierId = identifierId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.deleteClientIdentifier(clientId = clientId, identifierId = identifierId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt index f1156253c1..274b95af57 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/DownloadDocumentUseCase.kt @@ -9,27 +9,22 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.DocumentListRepository +import io.ktor.client.statement.HttpResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import okhttp3.ResponseBody class DownloadDocumentUseCase( private val repository: DocumentListRepository, ) { - suspend operator fun invoke( + operator fun invoke( entityType: String, entityId: Int, documentId: Int, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.downloadDocument(entityType, entityId, documentId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.downloadDocument(entityType, entityId, documentId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt index 2063e43003..22c710a2f8 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCenterDetailsUseCase.kt @@ -9,30 +9,21 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.room.entities.collectionsheet.CenterDetail import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class FetchCenterDetailsUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( format: String?, locale: String?, meetingDate: String?, officeId: Int, staffId: Int, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = - repository.fetchCenterDetails(format, locale, meetingDate, officeId, staffId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = + repository.fetchCenterDetails(format, locale, meetingDate, officeId, staffId) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt similarity index 66% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt index 1012dbf877..5a17c0e7c1 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchCollectionSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.core.model.objects.collectionsheets.CollectionSheetRequestPayload import com.mifos.room.entities.collectionsheet.CollectionSheetResponse @@ -20,16 +21,10 @@ class FetchCollectionSheetUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( groupId: Int, payload: CollectionSheetRequestPayload?, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.fetchCollectionSheet(groupId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.fetchCollectionSheet(groupId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt similarity index 61% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt index a2685617bd..2a5f9ad391 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchGroupsAssociatedWithCenterUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.room.entities.group.CenterWithAssociations import kotlinx.coroutines.flow.Flow @@ -19,13 +20,8 @@ class FetchGroupsAssociatedWithCenterUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke(centerId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.fetchGroupsAssociatedWithCenter(centerId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(centerId: Int): Flow> = + flow { + emit(repository.fetchGroupsAssociatedWithCenter(centerId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt similarity index 65% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt index 67afbe35a5..9f5e2ed6be 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/FetchProductiveCollectionSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.core.model.objects.collectionsheets.CollectionSheetRequestPayload import com.mifos.room.entities.collectionsheet.CollectionSheetResponse @@ -20,16 +21,10 @@ class FetchProductiveCollectionSheetUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( centerId: Int, payload: CollectionSheetRequestPayload?, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.fetchProductiveCollectionSheet(centerId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.fetchProductiveCollectionSheet(centerId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt similarity index 61% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt index 5fabaea7d7..7d70b37507 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV2UseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ChargeDialogRepository import com.mifos.core.model.objects.template.client.ChargeTemplate import kotlinx.coroutines.flow.Flow @@ -19,13 +20,7 @@ class GetAllChargesV2UseCase( private val repository: ChargeDialogRepository, ) { - suspend operator fun invoke(clientId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getAllChargesV2(clientId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(clientId: Int): Flow> = flow { + emit(repository.getAllChargesV2(clientId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt similarity index 57% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt index 1881be38c4..d7c948a57e 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllChargesV3UseCase.kt @@ -9,23 +9,18 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.LoanChargeDialogRepository +import io.ktor.client.statement.HttpResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import okhttp3.ResponseBody class GetAllChargesV3UseCase( private val repository: LoanChargeDialogRepository, ) { - suspend operator fun invoke(loanId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getAllChargesV3(loanId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(loanId: Int): Flow> = flow { + emit(repository.getAllChargesV3(loanId)) + }.asDataStateFlow() } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt new file mode 100644 index 0000000000..d15ada5ebd --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.LoanAccountRepository +import com.mifos.core.model.objects.organisations.LoanProducts +import kotlinx.coroutines.flow.Flow + +class GetAllLoanUseCase( + private val loanAccountRepository: LoanAccountRepository, +) { + + operator fun invoke(): Flow>> = + loanAccountRepository.allLoans() +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt new file mode 100644 index 0000000000..df28fd81e7 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.CenterDetailsRepository +import com.mifos.core.model.objects.groups.CenterInfo +import com.mifos.room.entities.group.CenterWithAssociations +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flow + +class GetCenterDetailsUseCase( + private val repository: CenterDetailsRepository, +) { + + operator fun invoke( + centerId: Int, + genericResultSet: Boolean, + ): Flow>>> = + combine( + flow { emit(repository.getCentersGroupAndMeeting(centerId)) }, + repository.getCenterSummaryInfo(centerId, genericResultSet), + ) { centerGroup, centerInfoState -> + DataState.Success(Pair(centerGroup, centerInfoState.data!!)) + } +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt index 3c99697582..57d7e2c2b2 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCentersInOfficeUseCase.kt @@ -9,26 +9,17 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.room.entities.group.CenterEntity import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetCentersInOfficeUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( id: Int, params: Map, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val centers = repository.getCentersInOffice(id, params) - emit(Resource.Success(centers)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = repository.getCentersInOffice(id, params) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt similarity index 51% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt index 0eb096cb73..f271595772 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerInboxBadgesUseCase.kt @@ -9,10 +9,9 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.CheckerInboxTasksRepository import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.zip /** @@ -22,17 +21,10 @@ import kotlinx.coroutines.flow.zip class GetCheckerInboxBadgesUseCase( private val repository: CheckerInboxTasksRepository, ) { - operator fun invoke(): Flow>> = flow { - try { - emit(Resource.Loading()) - repository.getCheckerTaskList() - .zip(repository.getRescheduleLoansTaskList()) { checkerTasks, rescheduleLoanTasks -> - Pair(checkerTasks.size, rescheduleLoanTasks.size) - }.collect { - emit(Resource.Success(it)) - } - } catch (e: Exception) { - emit(Resource.Error(e.message.toString())) - } - } + operator fun invoke(): Flow>> = + + repository.getCheckerTaskList() + .zip(repository.getRescheduleLoansTaskList()) { checkerTasks, rescheduleTasks -> + DataState.Success(Pair(checkerTasks.data!!.size, rescheduleTasks.data!!.size)) + } } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt index c69407af06..da40f3e1b0 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetCheckerTasksUseCase.kt @@ -9,27 +9,19 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.CheckerInboxRepository import com.mifos.core.model.objects.checkerinboxtask.CheckerTask import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetCheckerTasksUseCase( private val repository: CheckerInboxRepository, ) { - suspend operator fun invoke( + operator fun invoke( actionName: String? = null, entityName: String? = null, resourceId: Int? = null, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = repository.loadCheckerTasks(actionName, entityName, resourceId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = + repository.loadCheckerTasks(actionName, entityName, resourceId) } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt new file mode 100644 index 0000000000..7ccb7541dd --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow +import com.mifos.core.data.repository.ClientDetailsRepository +import com.mifos.room.entities.zipmodels.ClientAndClientAccounts +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow + +/** + * Created by Aditya Gupta on 18/03/24. + */ + +class GetClientDetailsUseCase( + private val repository: ClientDetailsRepository, +) { + + operator fun invoke(clientId: Int): Flow> = flow { + val client = repository.getClient(clientId) + val accounts = repository.getClientAccounts(clientId) + + val clientAndClientAccounts = ClientAndClientAccounts().apply { + this.client = client + this.clientAccounts = accounts + } + emit(clientAndClientAccounts) + }.asDataStateFlow() +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt similarity index 61% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt index a2e5b2ed7b..e6c806d3b8 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientIdentifierTemplateUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ClientIdentifierDialogRepository import com.mifos.core.model.objects.noncoreobjects.IdentifierTemplate import kotlinx.coroutines.flow.Flow @@ -19,13 +20,7 @@ class GetClientIdentifierTemplateUseCase( private val repository: ClientIdentifierDialogRepository, ) { - suspend operator fun invoke(clientId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getClientIdentifierTemplate(clientId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(clientId: Int): Flow> = flow { + emit(repository.getClientIdentifierTemplate(clientId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt similarity index 56% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt index ee59d95679..7cdce42e17 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientPinpointLocationsUseCase.kt @@ -9,23 +9,15 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.PinPointClientRepository import com.mifos.core.model.objects.clients.ClientAddressResponse import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetClientPinpointLocationsUseCase( private val pinPointClientRepository: PinPointClientRepository, ) { - suspend operator fun invoke(clientId: Int): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = pinPointClientRepository.getClientPinpointLocations(clientId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(clientId: Int): Flow>> = + pinPointClientRepository.getClientPinpointLocations(clientId) } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt new file mode 100644 index 0000000000..20e6426452 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountRepository +import com.mifos.room.entities.templates.savings.SavingProductsTemplate +import kotlinx.coroutines.flow.Flow +/** + * Created by Pronay Sarker on 04/08/2024 (11:59 AM) + */ +class GetClientSavingsAccountTemplateByProductUseCase( + private val repository: SavingsAccountRepository, +) { + + operator fun invoke(clientId: Int, productId: Int): Flow> = + repository.getClientSavingsAccountTemplateByProduct(clientId, productId) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt index ca8efffef0..1c75d86723 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDataTableInfoUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.DataTableDataRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -19,13 +20,7 @@ class GetDataTableInfoUseCase( private val repository: DataTableDataRepository, ) { - suspend operator fun invoke(table: String, entityId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val data = repository.getDataTableInfo(table, entityId) - emit(Resource.Success(data)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(table: String, entityId: Int): Flow> = flow { + emit(repository.getDataTableInfo(table, entityId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt index 89c4b42494..f96060d07a 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetDocumentsListUseCase.kt @@ -9,26 +9,18 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.DocumentListRepository import com.mifos.core.model.objects.noncoreobjects.Document import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetDocumentsListUseCase( private val repository: DocumentListRepository, ) { - suspend operator fun invoke( + operator fun invoke( entityType: String, entityId: Int, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val documents = repository.getDocumentsList(entityType, entityId) - emit(Resource.Success(documents)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = + repository.getDocumentsList(entityType, entityId) } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt new file mode 100644 index 0000000000..57cc0da3fb --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.GroupLoanAccountRepository +import com.mifos.core.model.objects.template.loan.GroupLoanTemplate +import kotlinx.coroutines.flow.Flow + +class GetGroupLoansAccountTemplateUseCase( + private val repository: GroupLoanAccountRepository, +) { + + operator fun invoke(groupId: Int, productId: Int): Flow> = + repository.getGroupLoansAccountTemplate(groupId, productId) +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt new file mode 100644 index 0000000000..21ed315068 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountRepository +import com.mifos.room.entities.templates.savings.SavingProductsTemplate +import kotlinx.coroutines.flow.Flow + +/** + * Created by Pronay Sarker on 04/08/2024 (12:13 PM) + */ +class GetGroupSavingsAccountTemplateByProductUseCase( + private val repository: SavingsAccountRepository, +) { + + operator fun invoke(groupId: Int, productId: Int): Flow> = + repository.getGroupSavingsAccountTemplateByProduct(groupId, productId) +} diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt new file mode 100644 index 0000000000..50f6f83c87 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.GroupListRepository +import com.mifos.room.entities.group.CenterWithAssociations +import kotlinx.coroutines.flow.Flow + +class GetGroupsByCenterUseCase(private val repository: GroupListRepository) { + operator fun invoke(id: Int): Flow> = + repository.getGroupsByCenter(id) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt index cd9b565f2f..0306806e37 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetGroupsByOfficeUseCase.kt @@ -9,26 +9,17 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.room.entities.group.GroupEntity import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetGroupsByOfficeUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( officeId: Int, params: Map, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = repository.getGroupsByOffice(officeId, params) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = repository.getGroupsByOffice(officeId, params) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt similarity index 64% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt index f51106b0cf..bf41828ed1 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetIndividualCollectionSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.NewIndividualCollectionSheetRepository import com.mifos.core.network.model.RequestCollectionSheetPayload import com.mifos.room.entities.collectionsheet.IndividualCollectionSheet @@ -20,13 +21,8 @@ class GetIndividualCollectionSheetUseCase( private val repository: NewIndividualCollectionSheetRepository, ) { - suspend operator fun invoke(payload: RequestCollectionSheetPayload): Flow> = + operator fun invoke(payload: RequestCollectionSheetPayload): Flow> = flow { - try { - emit(Resource.Loading()) - emit(Resource.Success(repository.getIndividualCollectionSheet(payload))) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + emit(repository.getIndividualCollectionSheet(payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt similarity index 57% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt index d53283b901..bd5021b066 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetListOfLoanChargesUseCase.kt @@ -9,23 +9,15 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.LoanChargeRepository import com.mifos.room.entities.client.ChargesEntity import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetListOfLoanChargesUseCase( private val repository: LoanChargeRepository, ) { - suspend operator fun invoke(loanId: Int): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = repository.getListOfLoanCharges(loanId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(loanId: Int): Flow>> = + repository.getListOfLoanCharges(loanId) } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt new file mode 100644 index 0000000000..a56db5c420 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.LoanAccountRepository +import com.mifos.room.entities.templates.loans.LoanTemplate +import kotlinx.coroutines.flow.Flow + +class GetLoansAccountTemplateUseCase( + private val loanAccountRepository: LoanAccountRepository, +) { + + operator fun invoke(clientId: Int, productId: Int): Flow> = + loanAccountRepository.getLoansAccountTemplate(clientId, productId) +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt similarity index 58% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt index 1fef3b8047..33eeb4121f 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportCategoryUseCase.kt @@ -9,28 +9,19 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.ReportCategoryRepository import com.mifos.core.model.objects.runreport.client.ClientReportTypeItem import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetReportCategoryUseCase( private val repository: ReportCategoryRepository, ) { - suspend operator fun invoke( + operator fun invoke( reportCategory: String, genericResultSet: Boolean, parameterType: Boolean, - ): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = - repository.getReportCategories(reportCategory, genericResultSet, parameterType) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow>> = + repository.getReportCategories(reportCategory, genericResultSet, parameterType) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt similarity index 61% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt index bf8de18565..069830664b 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportFullParameterListUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ReportDetailRepository import com.mifos.core.model.objects.runreport.FullParameterListResponse import kotlinx.coroutines.flow.Flow @@ -17,16 +18,10 @@ import kotlinx.coroutines.flow.flow class GetReportFullParameterListUseCase(private val repository: ReportDetailRepository) { - suspend operator fun invoke( + operator fun invoke( reportName: String, parameterType: Boolean, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getReportFullParameterList(reportName, parameterType) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.getReportFullParameterList(reportName, parameterType)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt index 17be96d629..ca2aa2c45c 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetReportParameterDetailsUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ReportDetailRepository import com.mifos.core.model.objects.runreport.FullParameterListResponse import kotlinx.coroutines.flow.Flow @@ -19,16 +20,10 @@ class GetReportParameterDetailsUseCase( private val repository: ReportDetailRepository, ) { - suspend operator fun invoke( + operator fun invoke( parameterName: String, parameterType: Boolean, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getReportParameterDetails(parameterName, parameterType) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.getReportParameterDetails(parameterName, parameterType)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt index 7799e4b1fd..0a7762691a 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportOfficesUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ReportDetailRepository import com.mifos.core.model.objects.runreport.FullParameterListResponse import kotlinx.coroutines.flow.Flow @@ -19,17 +20,11 @@ class GetRunReportOfficesUseCase( private val repository: ReportDetailRepository, ) { - suspend operator fun invoke( + operator fun invoke( parameterName: String, officeId: Int, parameterType: Boolean, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getRunReportOffices(parameterName, officeId, parameterType) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.getRunReportOffices(parameterName, officeId, parameterType)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt index da86e8f30e..90d1512768 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportProductUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ReportDetailRepository import com.mifos.core.model.objects.runreport.FullParameterListResponse import kotlinx.coroutines.flow.Flow @@ -19,17 +20,11 @@ class GetRunReportProductUseCase( private val repository: ReportDetailRepository, ) { - suspend operator fun invoke( + operator fun invoke( parameterName: String, currency: String, parameterType: Boolean, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getRunReportProduct(parameterName, currency, parameterType) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.getRunReportProduct(parameterName, currency, parameterType)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt index 61dcdc7f1c..10c0c4f40a 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetRunReportWithQueryUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.ReportDetailRepository import com.mifos.core.model.objects.runreport.FullParameterListResponse import kotlinx.coroutines.flow.Flow @@ -19,16 +20,10 @@ class GetRunReportWithQueryUseCase( private val repository: ReportDetailRepository, ) { - suspend operator fun invoke( + operator fun invoke( reportName: String, options: Map, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.getRunReportWithQuery(reportName, options) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.getRunReportWithQuery(reportName, options)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt index 11d827746a..3bf499f543 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetStaffInOfficeUseCase.kt @@ -9,22 +9,15 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.NewIndividualCollectionSheetRepository import com.mifos.room.entities.organisation.StaffEntity import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetStaffInOfficeUseCase( private val repository: NewIndividualCollectionSheetRepository, ) { - suspend operator fun invoke(officeId: Int): Flow>> = flow { - try { - emit(Resource.Loading()) - emit(Resource.Success(repository.getStaffInOffice(officeId))) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(officeId: Int): Flow>> = + repository.getStaffInOffice(officeId) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt similarity index 57% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt index 230341005f..14ecd5d488 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GetUserPathTrackingUseCase.kt @@ -9,23 +9,15 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.PathTrackingRepository import com.mifos.core.model.objects.users.UserLocation import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow class GetUserPathTrackingUseCase( private val repository: PathTrackingRepository, ) { - suspend operator fun invoke(userId: Int): Flow>> = flow { - try { - emit(Resource.Loading()) - val response = repository.getUserPathTracking(userId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(userId: Int): Flow>> = + repository.getUserPathTracking(userId) } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt similarity index 84% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt index 566ea0d373..32dbba7e87 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/GroupsListPagingDataSource.kt @@ -13,7 +13,9 @@ import androidx.paging.PagingSource import androidx.paging.PagingState import com.mifos.core.data.repository.GroupsListRepository import com.mifos.room.entities.group.GroupEntity -import java.io.IOException +import io.ktor.client.plugins.ClientRequestException +import io.ktor.client.plugins.ServerResponseException +import kotlinx.io.IOException class GroupsListPagingDataSource( private val repository: GroupsListRepository, @@ -38,6 +40,10 @@ class GroupsListPagingDataSource( prevKey = if (currentOffset <= 0) null else currentOffset - limit, nextKey = if (groups.isEmpty()) null else currentOffset + limit, ) + } catch (e: ClientRequestException) { + LoadResult.Error(e) + } catch (e: ServerResponseException) { + LoadResult.Error(e) } catch (e: IOException) { LoadResult.Error(e) } catch (e: Exception) { diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt new file mode 100644 index 0000000000..b8d9f59fc3 --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.SavingsAccountRepository +import com.mifos.room.entities.zipmodels.SavingProductsAndTemplate +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine + +/** + * Created by Pronay Sarker on 04/08/2024 (4:41 PM) + */ +class LoadSavingsAccountsAndTemplateUseCase( + private val repository: SavingsAccountRepository, +) { + + operator fun invoke(): Flow> = + combine( + repository.getSavingsAccounts(), + repository.getSavingsAccountTemplate(), + ) { savingsAccount, template -> + DataState.Success( + SavingProductsAndTemplate( + mProductSavings = savingsAccount.data!!, + mSavingProductsTemplate = template.data!!, + ), + ) + } +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/LoginUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/LoginUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt index 9ec304b0fa..c7527fe3c3 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/LoginUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt @@ -9,12 +9,12 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.LoginRepository +import com.mifos.core.network.model.PostAuthenticationResponse import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flow -import org.openapitools.client.models.PostAuthenticationResponse /** * Created by Aditya Gupta on 11/02/24. @@ -27,11 +27,7 @@ class LoginUseCase( operator fun invoke( username: String, password: String, - ): Flow> = flow { - emit(Resource.Loading()) - val result = loginRepository.login(username, password) - emit(Resource.Success(result)) - }.catch { e -> - emit(Resource.Error(e.message.toString())) - } + ): Flow> = flow { + emit(loginRepository.login(username, password)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt similarity index 64% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt index 6007f4c961..f1025325dc 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/PasswordValidationUseCase.kt @@ -9,8 +9,11 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.domain.R import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_enter_credentials +import core.domain.generated.resources.core_domain_error_password_length +import org.jetbrains.compose.resources.getString /** * Created by Aditya Gupta on 11/02/24. @@ -18,16 +21,16 @@ import com.mifos.core.domain.utils.ValidationResult class PasswordValidationUseCase { - operator fun invoke(password: String): ValidationResult { + suspend operator fun invoke(password: String): ValidationResult { if (password.isEmpty()) { return ValidationResult( success = false, - R.string.core_domain_enter_credentials, + getString(Res.string.core_domain_enter_credentials), ) } else if (password.length < 6) { return ValidationResult( success = false, - R.string.core_domain_error_password_length, + getString(Res.string.core_domain_error_password_length), ) } return ValidationResult(success = true) diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt index b6ffd7c30b..88bdd40a12 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RejectCheckerUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.CheckerInboxRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,13 +20,7 @@ class RejectCheckerUseCase( private val repository: CheckerInboxRepository, ) { - operator fun invoke(auditId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.rejectCheckerEntry(auditId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + operator fun invoke(auditId: Int): Flow> = flow { + emit(repository.rejectCheckerEntry(auditId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt similarity index 62% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt index 4d5bdc84f6..7977e7bc7f 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/RemoveDocumentUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.DocumentListRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,17 +20,11 @@ class RemoveDocumentUseCase( private val repository: DocumentListRepository, ) { - suspend operator fun invoke( + operator fun invoke( entityType: String, entityId: Int, documentId: Int, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.removeDocument(entityType, entityId, documentId) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.removeDocument(entityType, entityId, documentId)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt similarity index 61% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt index 19d960c884..740ffd0695 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SaveIndividualCollectionSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.IndividualCollectionSheetDetailsRepository import com.mifos.core.network.GenericResponse import com.mifos.core.network.model.IndividualCollectionSheetPayload @@ -20,14 +21,8 @@ class SaveIndividualCollectionSheetUseCase( private val repository: IndividualCollectionSheetDetailsRepository, ) { - suspend operator fun invoke(payload: IndividualCollectionSheetPayload): Flow> = + operator fun invoke(payload: IndividualCollectionSheetPayload): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.saveIndividualCollectionSheet(payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + emit(repository.saveIndividualCollectionSheet(payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ServerConfigValidatorUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ServerConfigValidatorUseCase.kt similarity index 100% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ServerConfigValidatorUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ServerConfigValidatorUseCase.kt diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt similarity index 65% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt index 0136d52488..5a572beaf0 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitCollectionSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.core.network.GenericResponse import com.mifos.room.entities.collectionsheet.CollectionSheetPayload @@ -20,16 +21,10 @@ class SubmitCollectionSheetUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( groupId: Int, payload: CollectionSheetPayload?, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.submitCollectionSheet(groupId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.submitCollectionSheet(groupId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt similarity index 65% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt index 7d51ffe671..4fd12b9164 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/SubmitProductiveSheetUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.GenerateCollectionSheetRepository import com.mifos.core.network.GenericResponse import com.mifos.room.entities.collectionsheet.ProductiveCollectionSheetPayload @@ -20,16 +21,10 @@ class SubmitProductiveSheetUseCase( private val repository: GenerateCollectionSheetRepository, ) { - suspend operator fun invoke( + operator fun invoke( centerId: Int, payload: ProductiveCollectionSheetPayload?, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = repository.submitProductiveSheet(centerId, payload) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ): Flow> = flow { + emit(repository.submitProductiveSheet(centerId, payload)) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt similarity index 66% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt index f44d3ad58d..dac9beae7e 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UpdateClientPinpointUseCase.kt @@ -9,7 +9,8 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.data.repository.PinPointClientRepository import com.mifos.core.network.GenericResponse import kotlinx.coroutines.flow.Flow @@ -19,21 +20,17 @@ class UpdateClientPinpointUseCase( private val pinPointClientRepository: PinPointClientRepository, ) { - suspend operator fun invoke( + operator fun invoke( clientId: Int, datatableId: Int, address: com.mifos.core.model.objects.clients.ClientAddressRequest, - ): Flow> = flow { - try { - emit(Resource.Loading()) - val response = pinPointClientRepository.updateClientPinpointLocation( + ): Flow> = flow { + emit( + pinPointClientRepository.updateClientPinpointLocation( clientId, datatableId, address, - ) - emit(Resource.Success(response)) - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } + ), + ) + }.asDataStateFlow() } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt similarity index 50% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt index 33da5e5705..da0bd07dde 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UploadClientImageUseCase.kt @@ -9,14 +9,10 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.common.utils.Resource +import com.mifos.core.common.utils.DataState import com.mifos.core.data.repository.ClientDetailsRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.RequestBody.Companion.asRequestBody -import okhttp3.ResponseBody -import java.io.File /** * Created by Aditya Gupta on 18/03/24. @@ -26,15 +22,13 @@ class UploadClientImageUseCase( private val repository: ClientDetailsRepository, ) { - operator fun invoke(id: Int, pngFile: File): Flow> = flow { + operator fun invoke(id: Int, image: String): Flow> = flow { try { - emit(Resource.Loading()) - val requestFile = pngFile.asRequestBody("image/png".toMediaTypeOrNull()) - val body = PartData.createFormData("file", pngFile.name, requestFile) - repository.uploadClientImage(id, body) - emit(Resource.Success(ResponseBody.create(null, "success"))) + emit(DataState.Loading) + repository.uploadClientImage(id, image) + DataState.Success("Client image uploaded successfully") } catch (e: Exception) { - emit(Resource.Error("Unable to update image: ${e.message}")) + DataState.Error(e) } } } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt similarity index 64% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt index 2a8825f557..a5904e9bd8 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/UsernameValidationUseCase.kt @@ -9,8 +9,11 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.domain.R import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_enter_credentials +import core.domain.generated.resources.core_domain_error_username_length +import org.jetbrains.compose.resources.getString /** * Created by Aditya Gupta on 11/02/24. @@ -18,16 +21,16 @@ import com.mifos.core.domain.utils.ValidationResult class UsernameValidationUseCase { - operator fun invoke(username: String): ValidationResult { + suspend operator fun invoke(username: String): ValidationResult { if (username.isEmpty()) { return ValidationResult( success = false, - R.string.core_domain_enter_credentials, + getString(Res.string.core_domain_enter_credentials), ) } else if (username.length < 5) { return ValidationResult( success = false, - R.string.core_domain_error_username_length, + getString(Res.string.core_domain_error_username_length), ) } return ValidationResult(success = true) diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt new file mode 100644 index 0000000000..88b6739b5c --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_error_api_path_blank +import core.domain.generated.resources.core_domain_error_api_path_end_with +import core.domain.generated.resources.core_domain_error_api_path_start_with +import org.jetbrains.compose.resources.getString + +class ValidateServerApiPathUseCase { + suspend operator fun invoke(apiPath: String): ValidationResult { + if (apiPath.isBlank()) { + return ValidationResult(false, getString(Res.string.core_domain_error_api_path_blank)) + } + + if (!apiPath.startsWith("/")) { + return ValidationResult(false, getString(Res.string.core_domain_error_api_path_start_with)) + } + + if (!apiPath.endsWith("/")) { + return ValidationResult(false, getString(Res.string.core_domain_error_api_path_end_with)) + } + + return ValidationResult(true) + } +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt similarity index 59% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt index b8fc9b211c..d3fc7272ea 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerEndPointUseCase.kt @@ -9,20 +9,23 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.domain.R import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_error_endpoint_blank +import core.domain.generated.resources.core_domain_error_endpoint_invalid +import org.jetbrains.compose.resources.getString class ValidateServerEndPointUseCase { - operator fun invoke(endPoint: String): ValidationResult { + suspend operator fun invoke(endPoint: String): ValidationResult { val regex = Regex("^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$") if (endPoint.isBlank()) { - return ValidationResult(false, R.string.core_domain_error_endpoint_blank) + return ValidationResult(false, getString(Res.string.core_domain_error_endpoint_blank)) } if (!regex.matches(endPoint)) { - return ValidationResult(false, R.string.core_domain_error_endpoint_invalid) + return ValidationResult(false, getString(Res.string.core_domain_error_endpoint_invalid)) } return ValidationResult(true) diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt similarity index 60% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt index 2b16a5d052..dd979bcf5a 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerPortUseCase.kt @@ -9,17 +9,20 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.domain.R import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_error_port_blank +import core.domain.generated.resources.core_domain_error_port_invalid +import org.jetbrains.compose.resources.getString class ValidateServerPortUseCase { - operator fun invoke(port: String): ValidationResult { + suspend operator fun invoke(port: String): ValidationResult { return if (port.isBlank()) { - ValidationResult(false, R.string.core_domain_error_port_blank) + ValidationResult(false, getString(Res.string.core_domain_error_port_blank)) } else { val convertedPort = port.toIntOrNull() if (convertedPort == null || convertedPort !in 1..65535) { - ValidationResult(false, R.string.core_domain_error_port_invalid) + ValidationResult(false, getString(Res.string.core_domain_error_port_invalid)) } else { ValidationResult(true) } diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt new file mode 100644 index 0000000000..86f1dd7f2d --- /dev/null +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2024 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.core.domain.useCases + +import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_error_protocol_blank +import core.domain.generated.resources.core_domain_error_protocol_invalid +import org.jetbrains.compose.resources.getString + +class ValidateServerProtocolUseCase { + + suspend operator fun invoke(protocol: String): ValidationResult { + val protocolRegex = Regex("^(http://|https://)$") + + return when { + protocol.isBlank() -> ValidationResult(false, getString(Res.string.core_domain_error_protocol_blank)) + !protocolRegex.matches(protocol) -> ValidationResult(false, getString(Res.string.core_domain_error_protocol_invalid)) + else -> ValidationResult(true) + } + } +} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt similarity index 56% rename from core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt index b12db1e618..8369a4d5c3 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/ValidateServerTenantUseCase.kt @@ -9,19 +9,22 @@ */ package com.mifos.core.domain.useCases -import com.mifos.core.domain.R import com.mifos.core.domain.utils.ValidationResult +import core.domain.generated.resources.Res +import core.domain.generated.resources.core_domain_error_tenant_blank +import core.domain.generated.resources.core_domain_error_tenant_invalid +import org.jetbrains.compose.resources.getString class ValidateServerTenantUseCase { - operator fun invoke(tenant: String): ValidationResult { + suspend operator fun invoke(tenant: String): ValidationResult { val regex = Regex("^[a-zA-Z0-9]+$") if (tenant.isBlank()) { - return ValidationResult(false, R.string.core_domain_error_tenant_blank) + return ValidationResult(false, getString(Res.string.core_domain_error_tenant_blank)) } if (!regex.matches(tenant)) { - return ValidationResult(false, R.string.core_domain_error_tenant_invalid) + return ValidationResult(false, getString(Res.string.core_domain_error_tenant_invalid)) } return ValidationResult(true) diff --git a/core/domain/src/main/java/com/mifos/core/domain/utils/ValidationResult.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/utils/ValidationResult.kt similarity index 93% rename from core/domain/src/main/java/com/mifos/core/domain/utils/ValidationResult.kt rename to core/domain/src/commonMain/kotlin/com/mifos/core/domain/utils/ValidationResult.kt index a6d9e366ff..1fa57cde87 100644 --- a/core/domain/src/main/java/com/mifos/core/domain/utils/ValidationResult.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/utils/ValidationResult.kt @@ -17,5 +17,5 @@ data class ValidationResult( val success: Boolean, - val message: Int? = null, + val message: String? = null, ) diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt deleted file mode 100644 index bf459726b7..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateGroupUseCase.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.ActivateRepository -import com.mifos.core.model.objects.clients.ActivatePayload -import com.mifos.core.network.GenericResponse -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class ActivateGroupUseCase( - private val activateRepository: ActivateRepository, -) { - - suspend operator fun invoke( - groupId: Int, - groupPayload: ActivatePayload, - ): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - activateRepository.activateGroup(groupId, groupPayload) - .subscribeOn(AndroidSchedulers.mainThread()) - .observeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(response: GenericResponse) { - trySend(Resource.Success(response)) - } - }) - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt deleted file mode 100644 index 6437062d4f..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ActivateSavingsUseCase.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountActivateRepository -import com.mifos.core.network.GenericResponse -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (12:33 PM) - */ -class ActivateSavingsUseCase( - private val repository: SavingsAccountActivateRepository, -) { - - suspend operator fun invoke(savingsAccountId: Int, request: HashMap): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - - repository.activateSavings(savingsAccountId, request) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(genericResponse: GenericResponse) { - trySend(Resource.Success(genericResponse)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt deleted file mode 100644 index 086e06bc88..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ApproveSavingsApplicationUseCase.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountApprovalRepository -import com.mifos.core.model.objects.account.loan.SavingsApproval -import com.mifos.core.network.GenericResponse -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (12:46 PM) - */ -class ApproveSavingsApplicationUseCase( - private val repository: SavingsAccountApprovalRepository, -) { - - suspend operator fun invoke(savingsAccountId: Int, savingsApproval: SavingsApproval?): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - - repository.approveSavingsApplication(savingsAccountId, savingsApproval) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(genericResponse: GenericResponse) { - trySend(Resource.Success(genericResponse)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt deleted file mode 100644 index c804b3676c..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateDocumentUseCase.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SignatureRepository -import com.mifos.core.network.GenericResponse -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class CreateDocumentUseCase( - private val repository: SignatureRepository, -) { - - suspend operator fun invoke( - entityType: String?, - entityId: Int, - name: String?, - desc: String?, - file: PartData?, - ): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - repository.createDocument(entityType, entityId, name, desc, file) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(response: GenericResponse) { - trySend(Resource.Success(response)) - } - }) - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt deleted file mode 100644 index 65c11a6450..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateGroupLoansAccountUseCase.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.GroupLoanAccountRepository -import com.mifos.core.model.objects.payloads.GroupLoanPayload -import com.mifos.room.entities.accounts.loans.Loan -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class CreateGroupLoansAccountUseCase( - private val repository: GroupLoanAccountRepository, -) { - - suspend operator fun invoke(loansPayload: GroupLoanPayload): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - repository.createGroupLoansAccount(loansPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(response: Loan) { - trySend(Resource.Success(response)) - } - }) - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt deleted file mode 100644 index 72dc045313..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateLoanAccountUseCase.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.LoanAccountRepository -import com.mifos.core.network.model.LoansPayload -import com.mifos.room.entities.accounts.loans.Loan -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class CreateLoanAccountUseCase( - private val loanAccountRepository: LoanAccountRepository, -) { - - suspend operator fun invoke(loansPayload: LoansPayload): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - loanAccountRepository.createLoansAccount(loansPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(loans: Loan) { - trySend(Resource.Success(loans)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt deleted file mode 100644 index f50c079e3b..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/CreateSavingsAccountUseCase.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountRepository -import com.mifos.core.model.objects.payloads.SavingsPayload -import com.mifos.room.entities.client.Savings -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (12:19 PM) - */ - -class CreateSavingsAccountUseCase( - private val repository: SavingsAccountRepository, -) { - - suspend operator fun invoke(savingsPayload: SavingsPayload?): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - - repository.createSavingsAccount(savingsPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(savings: Savings?) { - trySend(Resource.Success(savings)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt deleted file mode 100644 index d0ca1101d6..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetAllLoanUseCase.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.LoanAccountRepository -import com.mifos.core.model.objects.organisations.LoanProducts -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class GetAllLoanUseCase( - private val loanAccountRepository: LoanAccountRepository, -) { - - suspend operator fun invoke(): Flow>> = callbackFlow { - try { - trySend(Resource.Loading()) - loanAccountRepository.allLoans() - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber>() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(products: List) { - trySend(Resource.Success(products)) - } - }) - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt deleted file mode 100644 index 0f27d13732..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetCenterDetailsUseCase.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.CenterDetailsRepository -import com.mifos.core.model.objects.groups.CenterInfo -import com.mifos.room.entities.group.CenterWithAssociations -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.zip - -class GetCenterDetailsUseCase( - private val repository: CenterDetailsRepository, -) { - - suspend operator fun invoke( - centerId: Int, - genericResultSet: Boolean, - ): Flow>>> = flow { - try { - emit(Resource.Loading()) - repository.getCentersGroupAndMeeting(centerId) - .zip( - repository.getCenterSummaryInfo( - centerId, - genericResultSet, - ), - ) { centerGroup, centerInfo -> - Pair(centerGroup, centerInfo) - }.collect { - emit(Resource.Success(it)) - } - } catch (exception: Exception) { - emit(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt deleted file mode 100644 index 17d3c122fd..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientDetailsUseCase.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.ClientDetailsRepository -import com.mifos.room.entities.zipmodels.ClientAndClientAccounts -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.withContext - -/** - * Created by Aditya Gupta on 18/03/24. - */ - -class GetClientDetailsUseCase( - private val repository: ClientDetailsRepository, -) { - - operator fun invoke(clientId: Int): Flow> = flow { - try { - emit(Resource.Loading()) - val clientAndClientAccounts = withContext(Dispatchers.IO) { - val clientAccountsDeferred = async { repository.getClientAccounts(clientId) } - val clientDeferred = async { repository.getClient(clientId) } - - val clientAccounts = clientAccountsDeferred.await() - val client = clientDeferred.await() - - ClientAndClientAccounts().apply { - this.client = client - this.clientAccounts = clientAccounts - } - } - emit(Resource.Success(clientAndClientAccounts)) - } catch (e: Exception) { - emit(Resource.Error(e.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt deleted file mode 100644 index 176ec2bf21..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetClientSavingsAccountTemplateByProductUseCase.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountRepository -import com.mifos.room.entities.templates.savings.SavingProductsTemplate -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (11:59 AM) - */ -class GetClientSavingsAccountTemplateByProductUseCase( - private val repository: SavingsAccountRepository, -) { - - suspend operator fun invoke(clientId: Int, productId: Int): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - repository.getClientSavingsAccountTemplateByProduct(clientId, productId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() { - } - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(savingProductsTemplate: SavingProductsTemplate?) { - trySend(Resource.Success(savingProductsTemplate)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt deleted file mode 100644 index 2cce70d8f0..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupLoansAccountTemplateUseCase.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.GroupLoanAccountRepository -import com.mifos.core.model.objects.template.loan.GroupLoanTemplate -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class GetGroupLoansAccountTemplateUseCase( - private val repository: GroupLoanAccountRepository, -) { - - suspend operator fun invoke(groupId: Int, productId: Int): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - repository.getGroupLoansAccountTemplate(groupId, productId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(response: GroupLoanTemplate) { - trySend(Resource.Success(response)) - } - }) - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt deleted file mode 100644 index fa0458562e..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupSavingsAccountTemplateByProductUseCase.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountRepository -import com.mifos.room.entities.templates.savings.SavingProductsTemplate -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (12:13 PM) - */ -class GetGroupSavingsAccountTemplateByProductUseCase( - private val repository: SavingsAccountRepository, -) { - - suspend operator fun invoke(groupId: Int, productId: Int): Flow> = callbackFlow { - try { - trySend(Resource.Loading()) - - repository.getGroupSavingsAccountTemplateByProduct(groupId, productId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() { - } - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(savingProductsTemplate: SavingProductsTemplate?) { - trySend(Resource.Success(savingProductsTemplate)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt deleted file mode 100644 index c07544f943..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetGroupsByCenterUseCase.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -class GetGroupsByCenterUseCase - -// -// import com.mifos.core.common.utils.Resource -// import com.mifos.core.data.repository.GroupListRepository -// import com.mifos.room.entities.group.CenterWithAssociations -// import kotlinx.coroutines.channels.awaitClose -// import kotlinx.coroutines.flow.Flow -// import kotlinx.coroutines.flow.callbackFlow -// import rx.Subscriber -// import rx.android.schedulers.AndroidSchedulers -// import rx.schedulers.Schedulers -// import javax.inject.Inject -// -// class GetGroupsByCenterUseCase @Inject constructor(private val repository: GroupListRepository) { -// -// suspend operator fun invoke(id: Int): Flow> = callbackFlow { -// try { -// trySend(Resource.Loading()) -// repository.getGroupsByCenter(id) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribeOn(Schedulers.io()) -// .subscribe(object : Subscriber() { -// override fun onCompleted() { -// } -// -// override fun onError(e: Throwable) { -// trySend(Resource.Error(e.message.toString())) -// } -// -// override fun onNext(centerWithAssociations: CenterWithAssociations) { -// trySend(Resource.Success(centerWithAssociations)) -// } -// }) -// -// awaitClose { channel.close() } -// } catch (exception: Exception) { -// send(Resource.Error(exception.message.toString())) -// } -// } -// } diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt deleted file mode 100644 index 1cf6fb46e1..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/GetLoansAccountTemplateUseCase.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.LoanAccountRepository -import com.mifos.room.entities.templates.loans.LoanTemplate -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -class GetLoansAccountTemplateUseCase( - private val loanAccountRepository: LoanAccountRepository, -) { - - suspend operator fun invoke(clientId: Int, productId: Int): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - loanAccountRepository.getLoansAccountTemplate(clientId, productId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(exception: Throwable) { - trySend(Resource.Error(exception.message.toString())) - } - - override fun onNext(loanTemplate: LoanTemplate?) { - trySend(Resource.Success(loanTemplate)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - trySend(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt deleted file mode 100644 index 5f1faf7044..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/LoadSavingsAccountsAndTemplateUseCase.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.common.utils.Resource -import com.mifos.core.data.repository.SavingsAccountRepository -import com.mifos.room.entities.zipmodels.SavingProductsAndTemplate -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import rx.Observable -import rx.Subscriber -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers - -/** - * Created by Pronay Sarker on 04/08/2024 (4:41 PM) - */ -class LoadSavingsAccountsAndTemplateUseCase( - private val repository: SavingsAccountRepository, -) { - - suspend operator fun invoke(): Flow> = - callbackFlow { - try { - trySend(Resource.Loading()) - - Observable.combineLatest( - repository.savingsAccounts(), - repository.savingsAccountTemplate(), - ) { productSavings, template -> - SavingProductsAndTemplate(productSavings, template) - }.observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(object : Subscriber() { - override fun onCompleted() {} - - override fun onError(e: Throwable) { - trySend(Resource.Error(e.message.toString())) - } - - override fun onNext(savingProductsAndTemplate: SavingProductsAndTemplate?) { - trySend(Resource.Success(savingProductsAndTemplate)) - } - }) - - awaitClose { channel.close() } - } catch (exception: Exception) { - send(Resource.Error(exception.message.toString())) - } - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt deleted file mode 100644 index 9a8260a563..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerApiPathUseCase.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.domain.R -import com.mifos.core.domain.utils.ValidationResult - -class ValidateServerApiPathUseCase { - operator fun invoke(apiPath: String): ValidationResult { - if (apiPath.isBlank()) { - return ValidationResult(false, R.string.core_domain_error_api_path_blank) - } - - if (!apiPath.startsWith("/")) { - return ValidationResult(false, R.string.core_domain_error_api_path_start_with) - } - - if (!apiPath.endsWith("/")) { - return ValidationResult(false, R.string.core_domain_error_api_path_end_with) - } - - return ValidationResult(true) - } -} diff --git a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt b/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt deleted file mode 100644 index e82ba2f484..0000000000 --- a/core/domain/src/main/java/com/mifos/core/domain/useCases/ValidateServerProtocolUseCase.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain.useCases - -import com.mifos.core.domain.R.string -import com.mifos.core.domain.utils.ValidationResult -import java.util.regex.Pattern - -class ValidateServerProtocolUseCase { - - operator fun invoke(protocol: String): ValidationResult { - val protocolRegex = Pattern.compile("^(http://|https://)$") - - return when { - protocol.isBlank() -> ValidationResult(false, string.core_domain_error_protocol_blank) - !protocolRegex.matcher(protocol).matches() -> ValidationResult(false, string.core_domain_error_protocol_invalid) - else -> ValidationResult(true) - } - } -} diff --git a/core/domain/src/test/java/com/mifos/core/domain/ExampleUnitTest.kt b/core/domain/src/test/java/com/mifos/core/domain/ExampleUnitTest.kt deleted file mode 100644 index e36daa9056..0000000000 --- a/core/domain/src/test/java/com/mifos/core/domain/ExampleUnitTest.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.core.domain - -import org.junit.Assert.assertEquals -import org.junit.Test - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/core/model/src/commonMain/kotlin/com/mifos/core/model/objects/error/MifosError.kt b/core/model/src/commonMain/kotlin/com/mifos/core/model/objects/error/MifosError.kt index c7b811fcec..eac4682211 100644 --- a/core/model/src/commonMain/kotlin/com/mifos/core/model/objects/error/MifosError.kt +++ b/core/model/src/commonMain/kotlin/com/mifos/core/model/objects/error/MifosError.kt @@ -24,5 +24,5 @@ data class MifosError( var userMessageGlobalisationCode: String? = null, - var errors: List = ArrayList(), + var errors: List = emptyList(), ) : Parcelable diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/datamanager/DataManagerClient.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/datamanager/DataManagerClient.kt index 90c5591ca7..1b4ac28f11 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/datamanager/DataManagerClient.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/datamanager/DataManagerClient.kt @@ -31,7 +31,6 @@ import com.mifos.room.entities.client.ClientEntity import com.mifos.room.entities.client.ClientPayloadEntity import com.mifos.room.entities.templates.clients.ClientsTemplateEntity import com.mifos.room.helper.ClientDaoHelper -import io.ktor.http.content.PartData import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first @@ -203,8 +202,8 @@ class DataManagerClient( * @param file MultipartBody of the Image file * @return ResponseBody is the Retrofit 2 response */ - suspend fun uploadClientImage(id: Int, file: PartData) { - mBaseApiManager.clientsApi.uploadClientImage(id, file) + suspend fun uploadClientImage(clientId: Int, typedFile: String) { + mBaseApiManager.clientsApi.uploadClientImage(clientId, typedFile) } /** * Return Clients from DatabaseHelperClient only one time. diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/services/ClientService.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/services/ClientService.kt index 3c5ad905a5..e9dcc4a1d4 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/services/ClientService.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/services/ClientService.kt @@ -27,14 +27,10 @@ import com.mifos.room.entities.templates.clients.ClientsTemplateEntity import de.jensklingenberg.ktorfit.http.Body import de.jensklingenberg.ktorfit.http.DELETE import de.jensklingenberg.ktorfit.http.GET -import de.jensklingenberg.ktorfit.http.Multipart import de.jensklingenberg.ktorfit.http.POST import de.jensklingenberg.ktorfit.http.PUT -import de.jensklingenberg.ktorfit.http.Part import de.jensklingenberg.ktorfit.http.Path import de.jensklingenberg.ktorfit.http.Query -import io.ktor.client.statement.HttpResponse -import io.ktor.http.content.PartData import kotlinx.coroutines.flow.Flow /** @@ -64,12 +60,11 @@ interface ClientService { @GET(APIEndPoint.CLIENTS + "/{clientId}") suspend fun getClient(@Path("clientId") clientId: Int): ClientEntity - @Multipart @POST(APIEndPoint.CLIENTS + "/{clientId}/images") suspend fun uploadClientImage( @Path("clientId") clientId: Int, - @Part file: PartData, - ): HttpResponse + @Body typedFile: String, + ): Unit @DELETE(APIEndPoint.CLIENTS + "/{clientId}/images") suspend fun deleteClientImage(@Path("clientId") clientId: Int)