Skip to content

Instantly share code, notes, and snippets.

class TransactionListViewModelImpl(
private val getTransactionsUseCase: GetTransactionsUseCase //typealias
) : TransactionListViewModel, ViewModel() {
private val compositeDisposable = CompositeDisposable()
override val state = MutableLiveData<State>()
override fun loadTransactions() {
state.postValue(State.Loading)
getTransactionsUseCase().subscribeBy { handleResult(it) }
class MyDaggerModule {
@Provides
fun provideGetTransactionsUseCase(
private val userRepository: UserRepository,
private val transactionRepository: TransactionRepository
): GetTransactionsUseCase {
return {
getTransactions(
userRepository::getUser,
class FPGetTransactionUseCaseFactory(
private val userRepository: UserRepository,
private val transactionRepository: TransactionRepository
) {
fun makeGetTransactionsUseCase(): GetTransactionsUseCase {
return {
getTransactions(
userRepository::getUser,
transactionRepository
class TransactionListViewModelImpl(
private val getTransactionsUseCase: GetTransactionsUseCase //interface
) : TransactionListViewModel, ViewModel() {
private val compositeDisposable = CompositeDisposable()
override val state = MutableLiveData<State>()
override fun loadTransactions() {
state.postValue(State.Loading)
getTransactionsUseCase().subscribeBy { handleResult(it) }
class GetUserUseCaseImpl(
private val userRepository: UserRepository
) : GetUserUseCase {
override fun invoke(): User = userRepository.getUser()
}
interface TransactionRepository {
fun getTransactions(userId: String): Single<SimpleResult<List<Transaction>>>
}
interface UserRepository {
fun getUser(): User
inline fun getTransactions(
getUserUseCase: GetUserUseCase,
transactionRepository: TransactionRepository
): Single<SimpleResult<List<Transaction>>> {
return transactionRepository.getTransactions(getUserUseCase().id)
}
typealias GetTransactionsUseCase = () -> Single<SimpleResult<List<Transaction>>>
class GetTransactionsUseCaseImpl(
private val getUserUseCase: GetUserUseCase,
private val transactionRepository: TransactionRepository
) : GetTransactionsUseCase {
override fun invoke(): Single<SimpleResult<List<Transaction>>> {
return transactionRepository.getTransactions(getUserUseCase().id)
}
}
object FPRepositoryFactory {
fun makeAlbumRepository(): AlbumRepository {
return AlbumRepositoryImpl(
AlbumApiServiceImpl(),
makeAlbumDataMapper()
)
}
private fun makeAlbumDataMapper(): (NetworkAlbum) -> Album = { albumDto ->
object OOPRepositoryFactory {
fun makeAlbumRepository(): AlbumRepository {
return AlbumRepositoryImpl(
AlbumApiServiceImpl(),
AlbumDataMapper(NullableInputListMapperImpl(SongDataMapper()))
)
}
}