Skip to content

Commit

Permalink
Merge pull request #231 from hieuwu/feature/avoid-hardcoded-dispatchers
Browse files Browse the repository at this point in the history
Avoid hardcoded dispatchers
  • Loading branch information
hieuwu committed Dec 9, 2023
2 parents 914b394 + cbe5dce commit b2b3420
Show file tree
Hide file tree
Showing 23 changed files with 125 additions and 51 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/app-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ jobs:

steps:
- uses: actions/checkout@v1
- name: set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 11
java-version: 17
#- name: Check Detekt
# run: chmod +x .github/scripts/gradlew_recursive.sh ; .github/scripts/gradlew_recursive.sh detekt
- name: Build project
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
/.idea/*
.DS_Store
/build
/captures
Expand Down
6 changes: 3 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ android {
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
jvmTarget = JavaVersion.VERSION_17.toString()
}

buildFeatures {
Expand Down
2 changes: 1 addition & 1 deletion app/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import timber.log.Timber
import javax.inject.Inject

class CategoryRepositoryImpl @Inject constructor(

private val categoryDao: CategoryDao,
private val supabasePostgrest: Postgrest
) :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,12 @@ import com.hieuwu.groceriesstore.data.network.dto.OrderDto
import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.domain.models.OrderModel
import com.hieuwu.groceriesstore.utilities.CollectionNames
import com.hieuwu.groceriesstore.utilities.CollectionNames.orders
import com.hieuwu.groceriesstore.utilities.OrderStatus
import com.hieuwu.groceriesstore.utilities.SupabaseMapper
import io.github.jan.supabase.postgrest.Postgrest
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject

Expand Down
38 changes: 38 additions & 0 deletions app/src/main/java/com/hieuwu/groceriesstore/di/DispatcherModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.hieuwu.groceriesstore.di

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import javax.inject.Qualifier

@Module
@InstallIn(SingletonComponent::class)
class DispatcherModule {

@DefaultDispatcher
@Provides
fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default

@IoDispatcher
@Provides
fun providesIoDispatcher(): CoroutineDispatcher = Dispatchers.IO

@MainDispatcher
@Provides
fun providesMainDispatcher(): CoroutineDispatcher = Dispatchers.Main
}

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class DefaultDispatcher

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class IoDispatcher

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class MainDispatcher
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.AddToCartUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class AddToCartUseCaseImpl @Inject constructor(private val orderRepository: OrderRepository) :
class AddToCartUseCaseImpl @Inject constructor(
private val orderRepository: OrderRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) :
AddToCartUseCase {
override suspend fun execute(input: AddToCartUseCase.Input): AddToCartUseCase.Output {
withContext(Dispatchers.IO) {
withContext(ioDispatcher) {
orderRepository.addLineItem(input.lineItem)
}
return AddToCartUseCase.Output()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.CreateNewOrderUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class CreateNewOrderUseCaseImpl @Inject constructor(private val orderRepository: OrderRepository) :
class CreateNewOrderUseCaseImpl @Inject constructor(
private val orderRepository: OrderRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) :
CreateNewOrderUseCase {
override suspend fun execute(input: CreateNewOrderUseCase.Input): CreateNewOrderUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
val result = orderRepository.createOrUpdate(input.order)
CreateNewOrderUseCase.Output(result)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package com.hieuwu.groceriesstore.domain.usecases.impl
import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.domain.usecases.GetCurrentCartUseCase
import com.hieuwu.groceriesstore.utilities.OrderStatus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import javax.inject.Inject

class GetCurrentCartUseCaseImpl @Inject constructor(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.GetOrderListUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class GetOrderListUseCaseImpl @Inject constructor(
private val orderRepository: OrderRepository
private val orderRepository: OrderRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) : GetOrderListUseCase {
override suspend fun execute(input: GetOrderListUseCase.Input): GetOrderListUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
val result = orderRepository.getOrders()
GetOrderListUseCase.Output.Success(data = result)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import com.hieuwu.groceriesstore.data.repository.UserRepository
import com.hieuwu.groceriesstore.domain.usecases.GetProfileUseCase
import javax.inject.Inject

class GetProfileUseCaseImpl @Inject constructor(private val userRepository: UserRepository) :
class GetProfileUseCaseImpl @Inject constructor(
private val userRepository: UserRepository,
) :
GetProfileUseCase {
override suspend fun execute(input: GetProfileUseCase.Input): GetProfileUseCase.Output {
val user = userRepository.getCurrentUser()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@ package com.hieuwu.groceriesstore.domain.usecases.impl
import com.hieuwu.groceriesstore.data.repository.CategoryRepository
import com.hieuwu.groceriesstore.data.repository.ProductRepository
import com.hieuwu.groceriesstore.data.repository.RecipeRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.RefreshAppDataUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class RefreshAppDataUseCaseImpl @Inject constructor(
private val productRepository: ProductRepository,
private val categoryRepository: CategoryRepository,
private val recipeRepository: RecipeRepository
) : RefreshAppDataUseCase {
private val recipeRepository: RecipeRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) : RefreshAppDataUseCase {
override suspend fun execute(input: Unit) {
withContext(Dispatchers.IO) {
withContext(ioDispatcher) {
categoryRepository.refreshDatabase()
productRepository.refreshDatabase()
recipeRepository.refreshDatabase()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.ProductRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.SearchProductUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class SearchProductUseCaseImpl @Inject constructor(private val productRepository: ProductRepository) :
class SearchProductUseCaseImpl @Inject constructor(
private val productRepository: ProductRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) :
SearchProductUseCase {
override suspend fun execute(input: SearchProductUseCase.Input): SearchProductUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
val result = productRepository.searchProductsListByName(input.name)
SearchProductUseCase.Output(result)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.UserRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.SignInUseCase
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject

class SignInUseCaseImpl @Inject constructor(private val userRepository: UserRepository) :
class SignInUseCaseImpl @Inject constructor(
private val userRepository: UserRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) :
SignInUseCase {
override suspend fun execute(input: SignInUseCase.Input): SignInUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
try {
val res = userRepository.authenticate(input.email, input.password)
SignInUseCase.Output(res)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.UserRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.SignOutUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class SignOutUseCaseImpl @Inject constructor(private val userRepository: UserRepository) :
class SignOutUseCaseImpl @Inject constructor(
private val userRepository: UserRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
) :
SignOutUseCase {
override suspend fun execute(input: SignOutUseCase.Input): SignOutUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
userRepository.clearUser()
SignOutUseCase.Output()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.SubmitOrderUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class SubmitOrderUseCaseImpl @Inject constructor(
private val orderRepository: OrderRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) : SubmitOrderUseCase {
override suspend fun execute(input: SubmitOrderUseCase.Input): SubmitOrderUseCase.Output {
return withContext(Dispatchers.IO) {
return withContext(ioDispatcher) {
val result = orderRepository.sendOrderToServer(input.order)
SubmitOrderUseCase.Output(result)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.domain.models.LineItemModel
import com.hieuwu.groceriesstore.domain.models.OrderModel
import com.hieuwu.groceriesstore.data.repository.OrderRepository
import com.hieuwu.groceriesstore.data.repository.ProductRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.models.LineItemModel
import com.hieuwu.groceriesstore.domain.models.OrderModel
import com.hieuwu.groceriesstore.domain.usecases.UpdateCartItemUseCase
import com.hieuwu.groceriesstore.utilities.OrderStatus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.withContext
import javax.inject.Inject

class UpdateCartItemUseCaseImpl @Inject constructor(
private val productRepository: ProductRepository,
private val orderRepository: OrderRepository
private val orderRepository: OrderRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
) : UpdateCartItemUseCase {
override suspend fun updateLineItem(lineItemModel: LineItemModel) {
withContext(Dispatchers.IO) {
withContext(ioDispatcher) {
productRepository.updateLineItemQuantityById(
lineItemModel.quantity!!,
lineItemModel.id!!
)

}
}

override suspend fun removeLineItem(lineItemModel: LineItemModel) {
withContext(Dispatchers.IO) {
withContext(ioDispatcher) {
productRepository.removeLineItemById(lineItemModel.id!!)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.UserRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.UpdateProfileUseCase
import kotlinx.coroutines.CoroutineDispatcher
import javax.inject.Inject

class UpdateProfileUseCaseImpl @Inject constructor(private val userRepository: UserRepository) :
class UpdateProfileUseCaseImpl @Inject constructor(
private val userRepository: UserRepository,
) :
UpdateProfileUseCase {
override suspend fun execute(input: UpdateProfileUseCase.Input): UpdateProfileUseCase.Output {
userRepository.updateUserProfile(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package com.hieuwu.groceriesstore.domain.usecases.impl

import com.hieuwu.groceriesstore.data.repository.UserRepository
import com.hieuwu.groceriesstore.di.IoDispatcher
import com.hieuwu.groceriesstore.domain.usecases.UserSettingsUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import javax.inject.Inject

class UserSettingsUseCaseImpl @Inject constructor(private val userRepository: UserRepository) :
class UserSettingsUseCaseImpl @Inject constructor(
private val userRepository: UserRepository,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
) :
UserSettingsUseCase {

override suspend fun execute(input: UserSettingsUseCase.Input): UserSettingsUseCase.Output {
withContext(Dispatchers.IO) {
withContext(ioDispatcher) {
userRepository.updateUserSettings(
input.id,
input.isOrderCreatedEnabled,
Expand Down
Loading

0 comments on commit b2b3420

Please sign in to comment.