mirror of
https://github.com/k0shk0sh/FastHub.git
synced 2025-12-08 19:05:54 +00:00
make viewmodel & usecases unit testable.
Prepare for PR screen
This commit is contained in:
parent
2531a3ace2
commit
909ed113ed
@ -22,8 +22,8 @@ import javax.inject.Singleton
|
||||
FastHubDatabaseModule::class,
|
||||
NetworkModule::class,
|
||||
RepositoryModule::class,
|
||||
ActivityBindingModule::class,
|
||||
RepositoryModule::class ]
|
||||
ActivityBindingModule::class
|
||||
]
|
||||
)
|
||||
interface AppComponent : AndroidInjector<DaggerApplication> {
|
||||
|
||||
@ -32,7 +32,6 @@ interface AppComponent : AndroidInjector<DaggerApplication> {
|
||||
@BindsInstance fun application(application: Application): Builder
|
||||
@BindsInstance fun fastHubDatabaseModule(module: FastHubDatabaseModule): Builder
|
||||
@BindsInstance fun networkModule(module: NetworkModule): Builder
|
||||
@BindsInstance fun repoModule(module: RepositoryModule): Builder
|
||||
@BindsInstance fun repositoryModule(module: RepositoryModule): Builder
|
||||
|
||||
fun build(): AppComponent
|
||||
@ -48,7 +47,6 @@ interface AppComponent : AndroidInjector<DaggerApplication> {
|
||||
.application(app)
|
||||
.fastHubDatabaseModule(FastHubDatabaseModule())
|
||||
.networkModule(NetworkModule())
|
||||
.repoModule(RepositoryModule())
|
||||
.repositoryModule(RepositoryModule())
|
||||
.build()
|
||||
}
|
||||
|
||||
@ -26,14 +26,18 @@ import javax.inject.Singleton
|
||||
@Module
|
||||
class FastHubDatabaseModule {
|
||||
|
||||
@Singleton @Provides fun provideDatabase(@ForApplication context: Context): FastHubDatabase = Room.databaseBuilder(context,
|
||||
FastHubDatabase::class.java, DATABASE_NAME)
|
||||
@Singleton @Provides fun provideDatabase(@ForApplication context: Context): FastHubDatabase = Room.databaseBuilder(
|
||||
context,
|
||||
FastHubDatabase::class.java, DATABASE_NAME
|
||||
)
|
||||
.allowMainThreadQueries() // allow querying on MainThread (this useful in some cases)
|
||||
.fallbackToDestructiveMigration() // this mean that it will delete all tables and recreate them after version is changed
|
||||
.build()
|
||||
|
||||
@Singleton @Provides fun provideLoginDatabase(@ForApplication context: Context): FastHubLoginDatabase = Room.databaseBuilder(context,
|
||||
FastHubLoginDatabase::class.java, LOGIN_DATABASE_NAME)
|
||||
@Singleton @Provides fun provideLoginDatabase(@ForApplication context: Context): FastHubLoginDatabase = Room.databaseBuilder(
|
||||
context,
|
||||
FastHubLoginDatabase::class.java, LOGIN_DATABASE_NAME
|
||||
)
|
||||
.allowMainThreadQueries() // allow querying on MainThread
|
||||
.build()
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import com.apollographql.apollo.ApolloClient
|
||||
import com.fastaccess.data.persistence.db.FastHubDatabase
|
||||
import com.fastaccess.data.persistence.db.FastHubLoginDatabase
|
||||
import com.fastaccess.data.repository.*
|
||||
import com.fastaccess.domain.repository.LoginRemoteRepository
|
||||
import com.fastaccess.domain.repository.services.LoginService
|
||||
import com.fastaccess.domain.repository.services.UserService
|
||||
import com.google.gson.Gson
|
||||
@ -16,10 +17,17 @@ import javax.inject.Singleton
|
||||
*/
|
||||
@Module
|
||||
class RepositoryModule {
|
||||
@Singleton @Provides fun provideLoginRepository(
|
||||
@Singleton @Provides fun provideLocalLoginRepository(
|
||||
fastHubLoginDatabase: FastHubLoginDatabase,
|
||||
loginService: LoginService
|
||||
): LoginRepositoryProvider {
|
||||
): LoginLocalRepository {
|
||||
return LoginRepositoryProvider(fastHubLoginDatabase.provideLoginDao(), loginService)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideRemoteLoginRepository(
|
||||
fastHubLoginDatabase: FastHubLoginDatabase,
|
||||
loginService: LoginService
|
||||
): LoginRemoteRepository {
|
||||
return LoginRepositoryProvider(fastHubLoginDatabase.provideLoginDao(), loginService)
|
||||
}
|
||||
|
||||
@ -27,73 +35,76 @@ class RepositoryModule {
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient,
|
||||
userService: UserService
|
||||
): UserRepositoryProvider {
|
||||
): UserRepository {
|
||||
return UserRepositoryProvider(fastHubDatabase.getUserDao(), apolloClient, userService)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideMainIssuesPullsRepository(fastHubDatabase: FastHubDatabase): MyIssuesPullsRepositoryProvider {
|
||||
@Singleton @Provides fun provideMainIssuesPullsRepository(fastHubDatabase: FastHubDatabase): MyIssuesPullsRepository {
|
||||
return MyIssuesPullsRepositoryProvider(fastHubDatabase.getMainIssuesPullsDao())
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideNotificationRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
schedulerProvider: SchedulerProvider
|
||||
): NotificationRepositoryProvider {
|
||||
): NotificationRepository {
|
||||
return NotificationRepositoryProvider(fastHubDatabase.getNotifications(), schedulerProvider)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideFeedsRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
userService: UserService,
|
||||
loginRepositoryProvider: LoginRepositoryProvider,
|
||||
loginRepositoryProvider: LoginLocalRepository,
|
||||
gson: Gson
|
||||
): FeedsRepositoryProvider {
|
||||
): FeedsRepository {
|
||||
return FeedsRepositoryProvider(fastHubDatabase.getFeedsDao(), userService, loginRepositoryProvider, gson)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideUserReposRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient
|
||||
): UserReposRepositoryProvider {
|
||||
): UserReposRepository {
|
||||
return UserReposRepositoryProvider(fastHubDatabase.getUserRepoDao(), apolloClient)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideUserStarredReposRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient
|
||||
): UserStarredReposRepositoryProvider {
|
||||
): UserStarredReposRepository {
|
||||
return UserStarredReposRepositoryProvider(fastHubDatabase.getUserStarredRepoDao(), apolloClient)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideUserGistsRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient
|
||||
): UserGistsRepositoryProvider {
|
||||
): UserGistsRepository {
|
||||
return UserGistsRepositoryProvider(fastHubDatabase.getGistsDao(), apolloClient)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideUserFollowersFollowingRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient
|
||||
): UserFollowersFollowingRepositoryProvider {
|
||||
): FollowersFollowingRepository {
|
||||
return UserFollowersFollowingRepositoryProvider(fastHubDatabase.getFollowingFollowerDao(), apolloClient)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideOrgRepositoryProvider(
|
||||
fastHubDatabase: FastHubDatabase,
|
||||
apolloClient: ApolloClient,
|
||||
loginRepositoryProvider: LoginRepositoryProvider
|
||||
): OrgRepositoryProvider {
|
||||
loginRepositoryProvider: LoginLocalRepository
|
||||
): OrgRepository {
|
||||
return OrgRepositoryProvider(fastHubDatabase.getOrganizationDao(), apolloClient, loginRepositoryProvider)
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideIssueRepository(fastHubDatabase: FastHubDatabase): IssueRepositoryProvider {
|
||||
@Singleton @Provides fun provideIssueRepository(fastHubDatabase: FastHubDatabase): IssueRepository {
|
||||
return IssueRepositoryProvider(fastHubDatabase.getIssueDao())
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideSuggestionRepositoryProvider(fastHubDatabase: FastHubDatabase): SuggestionRepositoryProvider {
|
||||
@Singleton @Provides fun provideSuggestionRepositoryProvider(fastHubDatabase: FastHubDatabase): SuggestionRepository {
|
||||
return SuggestionRepositoryProvider(fastHubDatabase.getSuggestionDao())
|
||||
}
|
||||
|
||||
@Singleton @Provides fun provideAndroidSchedulerProvider(): SchedulerProvider = AndroidSchedulerProvider()
|
||||
|
||||
@Singleton @Provides fun providePullRequestRepo(fastHubDatabase: FastHubDatabase): PullRequestRepository =
|
||||
PullRequestRepositoryProvider(fastHubDatabase.getPullRequestDao())
|
||||
}
|
||||
@ -2,7 +2,7 @@ package com.fastaccess.github.platform.works
|
||||
|
||||
import android.app.Application
|
||||
import androidx.work.*
|
||||
import com.fastaccess.data.repository.NotificationRepositoryProvider
|
||||
import com.fastaccess.data.repository.NotificationRepository
|
||||
import com.fastaccess.domain.repository.services.NotificationService
|
||||
import com.fastaccess.github.utils.EXTRA
|
||||
import com.fastaccess.github.utils.EXTRA_TWO
|
||||
@ -16,7 +16,7 @@ class MarkAsReadNotificationWorker @Inject constructor(
|
||||
context: Application,
|
||||
private val workerParams: WorkerParameters,
|
||||
private val notificationService: NotificationService,
|
||||
private val provider: NotificationRepositoryProvider
|
||||
private val provider: NotificationRepository
|
||||
) : RxWorker(context, workerParams) {
|
||||
override fun createWork(): Single<Result> {
|
||||
val id = workerParams.inputData.getString(EXTRA)
|
||||
|
||||
@ -4,7 +4,7 @@ import android.net.Uri
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.fastaccess.data.persistence.db.FastHubDatabase
|
||||
import com.fastaccess.data.persistence.models.LoginModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.di.modules.AuthenticationInterceptor
|
||||
import com.fastaccess.github.usecase.auth.GetAccessTokenUseCase
|
||||
@ -20,7 +20,7 @@ class LoginChooserViewModel @Inject constructor(
|
||||
private val accessTokenUseCase: GetAccessTokenUseCase,
|
||||
private val loginWithAccessTokenUseCase: LoginWithAccessTokenUseCase,
|
||||
private val interceptor: AuthenticationInterceptor,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val fastHubDatabase: FastHubDatabase
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.persistence.models.FeedModel
|
||||
import com.fastaccess.data.repository.FeedsRepositoryProvider
|
||||
import com.fastaccess.data.repository.FeedsRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.usecase.feed.FeedsUseCase
|
||||
import javax.inject.Inject
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 20.10.18.
|
||||
*/
|
||||
class FeedsViewModel @Inject constructor(
|
||||
private val provider: FeedsRepositoryProvider,
|
||||
private val provider: FeedsRepository,
|
||||
private val usecase: FeedsUseCase
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -4,8 +4,8 @@ import androidx.lifecycle.MutableLiveData
|
||||
import com.apollographql.apollo.api.Input
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.model.TimelineModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.extensions.filterNull
|
||||
import com.fastaccess.github.extensions.map
|
||||
@ -20,10 +20,10 @@ import javax.inject.Inject
|
||||
class IssueTimelineViewModel @Inject constructor(
|
||||
private val issueUseCase: GetIssueUseCase,
|
||||
private val timelineUseCase: GetIssueTimelineUseCase,
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val closeOpenIssuePrUseCase: CloseOpenIssuePrUseCase,
|
||||
private val lockUnlockIssuePrUseCase: LockUnlockIssuePrUseCase,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val createIssueCommentUseCase: CreateIssueCommentUseCase,
|
||||
private val editIssuePrUseCase: EditIssuePrUseCase
|
||||
) : BaseViewModel() {
|
||||
|
||||
@ -26,11 +26,11 @@ class MainFragmentViewModel @Inject constructor(
|
||||
private val pullRequestsMainScreenUseCase: PullRequestsMainScreenUseCase,
|
||||
private val notificationUseCase: NotificationUseCase,
|
||||
private val feedsMainScreenUseCase: FeedsMainScreenUseCase,
|
||||
private val feedsRepositoryProvider: FeedsRepositoryProvider,
|
||||
private val myIssuesPullsRepo: MyIssuesPullsRepositoryProvider,
|
||||
private val notificationRepositoryProvider: NotificationRepositoryProvider,
|
||||
private val feedsRepositoryProvider: FeedsRepository,
|
||||
private val myIssuesPullsRepo: MyIssuesPullsRepository,
|
||||
private val notificationRepositoryProvider: NotificationRepository,
|
||||
private val fasthubDatabase: FastHubDatabase,
|
||||
private val loginProvider: LoginRepositoryProvider,
|
||||
private val loginProvider: LoginLocalRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ package com.fastaccess.github.ui.modules.notifications.fragment.read
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.fastaccess.data.model.GroupedNotificationsModel
|
||||
import com.fastaccess.data.repository.NotificationRepositoryProvider
|
||||
import com.fastaccess.data.repository.NotificationRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.usecase.notification.NotificationUseCase
|
||||
import javax.inject.Inject
|
||||
@ -11,7 +11,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 04.11.18.
|
||||
*/
|
||||
class AllNotificationsViewModel @Inject constructor(
|
||||
provider: NotificationRepositoryProvider,
|
||||
provider: NotificationRepository,
|
||||
private val usecase: NotificationUseCase
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.persistence.models.NotificationModel
|
||||
import com.fastaccess.data.repository.NotificationRepositoryProvider
|
||||
import com.fastaccess.data.repository.NotificationRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.usecase.notification.NotificationUseCase
|
||||
import javax.inject.Inject
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 31.10.18.
|
||||
*/
|
||||
class UnreadNotificationsViewModel @Inject constructor(
|
||||
private val provider: NotificationRepositoryProvider,
|
||||
private val provider: NotificationRepository,
|
||||
private val usecase: NotificationUseCase
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.persistence.models.FeedModel
|
||||
import com.fastaccess.data.repository.FeedsRepositoryProvider
|
||||
import com.fastaccess.data.repository.FeedsRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.usecase.user.UserFeedsUseCase
|
||||
import javax.inject.Inject
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 20.10.18.
|
||||
*/
|
||||
class ProfileFeedsViewModel @Inject constructor(
|
||||
private val provider: FeedsRepositoryProvider,
|
||||
private val provider: FeedsRepository,
|
||||
private val usecase: UserFeedsUseCase
|
||||
) : BaseViewModel() {
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.persistence.models.FollowingFollowerModel
|
||||
import com.fastaccess.data.repository.UserFollowersFollowingRepositoryProvider
|
||||
import com.fastaccess.data.repository.FollowersFollowingRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 15.10.18.
|
||||
*/
|
||||
class FollowersFollowingViewModel @Inject constructor(
|
||||
private val provider: UserFollowersFollowingRepositoryProvider
|
||||
private val provider: FollowersFollowingRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
|
||||
@ -10,8 +10,7 @@ import androidx.lifecycle.ViewModelProviders
|
||||
import com.fastaccess.data.model.FragmentType
|
||||
import com.fastaccess.data.model.ViewPagerModel
|
||||
import com.fastaccess.data.persistence.models.UserModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.isMe
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.github.R
|
||||
import com.fastaccess.github.base.BaseFragment
|
||||
import com.fastaccess.github.base.BasePagerFragment
|
||||
@ -43,7 +42,7 @@ import javax.inject.Inject
|
||||
*/
|
||||
class ProfileFragment : BasePagerFragment() {
|
||||
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
|
||||
@Inject lateinit var loginRepositoryProvider: LoginRepositoryProvider
|
||||
@Inject lateinit var loginRepositoryProvider: LoginLocalRepository
|
||||
|
||||
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(ProfileViewModel::class.java) }
|
||||
private val behaviour by lazy { AnchorSheetBehavior.from(bottomSheet) }
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.persistence.models.ProfileGistModel
|
||||
import com.fastaccess.data.repository.UserGistsRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserGistsRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 14.10.18.
|
||||
*/
|
||||
class ProfileGistsViewModel @Inject constructor(
|
||||
private val reposProvider: UserGistsRepositoryProvider
|
||||
private val reposProvider: UserGistsRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
@ -21,24 +21,28 @@ class ProfileGistsViewModel @Inject constructor(
|
||||
fun getGists(login: String): LiveData<PagedList<ProfileGistModel>> {
|
||||
val dataSourceFactory = reposProvider.getGists(login)
|
||||
val config = PagedList.Config.Builder()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
return LivePagedListBuilder(dataSourceFactory, config)
|
||||
.build()
|
||||
.build()
|
||||
}
|
||||
|
||||
fun loadGists(login: String, reload: Boolean = false) {
|
||||
fun loadGists(
|
||||
login: String,
|
||||
reload: Boolean = false
|
||||
) {
|
||||
if (reload) {
|
||||
pageInfo = null
|
||||
}
|
||||
val pageInfo = pageInfo
|
||||
if (!reload && (pageInfo != null && !pageInfo.hasNextPage)) return
|
||||
add(callApi(reposProvider.getGistsFromRemote(login, if (hasNext()) pageInfo?.endCursor else null))
|
||||
.subscribe({
|
||||
this.pageInfo = it.pageInfo
|
||||
postCounter(it.totalCount)
|
||||
}, { it.printStackTrace() }))
|
||||
.subscribe({
|
||||
this.pageInfo = it.pageInfo
|
||||
postCounter(it.totalCount)
|
||||
}, { it.printStackTrace() })
|
||||
)
|
||||
}
|
||||
|
||||
fun hasNext() = pageInfo?.hasNextPage == true
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.persistence.models.OrganizationModel
|
||||
import com.fastaccess.data.repository.OrgRepositoryProvider
|
||||
import com.fastaccess.data.repository.OrgRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 2018-11-26.
|
||||
*/
|
||||
class UserOrgsViewModel @Inject constructor(
|
||||
private val provider: OrgRepositoryProvider
|
||||
private val provider: OrgRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.persistence.models.ProfileRepoModel
|
||||
import com.fastaccess.data.repository.UserReposRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserReposRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 08.10.18.
|
||||
*/
|
||||
class ProfileReposViewModel @Inject constructor(
|
||||
private val reposProvider: UserReposRepositoryProvider
|
||||
private val reposProvider: UserReposRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
@ -21,24 +21,31 @@ class ProfileReposViewModel @Inject constructor(
|
||||
fun repos(login: String): LiveData<PagedList<ProfileRepoModel>> {
|
||||
val dataSourceFactory = reposProvider.getRepos(login)
|
||||
val config = PagedList.Config.Builder()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
return LivePagedListBuilder(dataSourceFactory, config)
|
||||
.build()
|
||||
.build()
|
||||
}
|
||||
|
||||
fun loadRepos(login: String, reload: Boolean = false) {
|
||||
fun loadRepos(
|
||||
login: String,
|
||||
reload: Boolean = false
|
||||
) {
|
||||
if (reload) {
|
||||
pageInfo = null
|
||||
}
|
||||
val pageInfo = pageInfo
|
||||
if (!reload && (pageInfo != null && !pageInfo.hasNextPage)) return
|
||||
add(callApi(reposProvider.getReposFromRemote(login, if (hasNext()) pageInfo?.endCursor else null))
|
||||
add(
|
||||
callApi(reposProvider.getReposFromRemote(login, if (hasNext()) pageInfo?.endCursor else null))
|
||||
.subscribe({
|
||||
this.pageInfo = it.pageInfo
|
||||
postCounter(it.totalCount)
|
||||
}, { it.printStackTrace() }))
|
||||
}, {
|
||||
it.printStackTrace()
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
fun hasNext() = pageInfo?.hasNextPage == true
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.paging.LivePagedListBuilder
|
||||
import androidx.paging.PagedList
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.persistence.models.ProfileStarredRepoModel
|
||||
import com.fastaccess.data.repository.UserStarredReposRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserStarredReposRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 13.10.18.
|
||||
*/
|
||||
class ProfileStarredReposViewModel @Inject constructor(
|
||||
private val reposProvider: UserStarredReposRepositoryProvider
|
||||
private val reposProvider: UserStarredReposRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
@ -21,24 +21,31 @@ class ProfileStarredReposViewModel @Inject constructor(
|
||||
fun starredRepos(login: String): LiveData<PagedList<ProfileStarredRepoModel>> {
|
||||
val dataSourceFactory = reposProvider.getStarredRepos(login)
|
||||
val config = PagedList.Config.Builder()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
.setPrefetchDistance(com.fastaccess.github.utils.PRE_FETCH_SIZE)
|
||||
.setPageSize(com.fastaccess.github.utils.PAGE_SIZE)
|
||||
.build()
|
||||
return LivePagedListBuilder(dataSourceFactory, config)
|
||||
.build()
|
||||
.build()
|
||||
}
|
||||
|
||||
fun loadStarredRepos(login: String, reload: Boolean = false) {
|
||||
fun loadStarredRepos(
|
||||
login: String,
|
||||
reload: Boolean = false
|
||||
) {
|
||||
if (reload) {
|
||||
pageInfo = null
|
||||
}
|
||||
val pageInfo = pageInfo
|
||||
if (!reload && (pageInfo != null && !pageInfo.hasNextPage)) return
|
||||
add(callApi(reposProvider.getStarredReposFromRemote(login, if (hasNext()) pageInfo?.endCursor else null))
|
||||
add(
|
||||
callApi(reposProvider.getStarredReposFromRemote(login, if (hasNext()) pageInfo?.endCursor else null))
|
||||
.subscribe({
|
||||
this.pageInfo = it.pageInfo
|
||||
postCounter(it.totalCount)
|
||||
}, { it.printStackTrace() }))
|
||||
}, {
|
||||
it.printStackTrace()
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
fun hasNext() = pageInfo?.hasNextPage == true
|
||||
|
||||
@ -7,7 +7,7 @@ import com.fastaccess.data.model.ShortRepoModel
|
||||
import com.fastaccess.data.model.ShortUserModel
|
||||
import com.fastaccess.data.model.parcelable.FilterSearchModel
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.SuggestionRepositoryProvider
|
||||
import com.fastaccess.data.repository.SuggestionRepository
|
||||
import com.fastaccess.github.base.BaseViewModel
|
||||
import com.fastaccess.github.usecase.issuesprs.FilterIssuesUseCase
|
||||
import com.fastaccess.github.usecase.issuesprs.FilterPullRequestsUseCase
|
||||
@ -24,7 +24,7 @@ class FilterSearchViewModel @Inject constructor(
|
||||
private val filterPullRequestsUseCase: FilterPullRequestsUseCase,
|
||||
private val filterSearchReposUseCase: FilterSearchReposUseCase,
|
||||
private val filterSearchUsersUseCase: FilterSearchUsersUseCase,
|
||||
private val suggestionRepositoryProvider: SuggestionRepositoryProvider
|
||||
private val suggestionRepositoryProvider: SuggestionRepository
|
||||
) : BaseViewModel() {
|
||||
|
||||
private var pageInfo: PageInfoModel? = null
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.fastaccess.github.usecase.auth
|
||||
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.LoginRemoteRepository
|
||||
import com.fastaccess.domain.response.AccessTokenResponse
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.fastaccess.github.BuildConfig
|
||||
@ -13,7 +13,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 12.05.18.
|
||||
*/
|
||||
class GetAccessTokenUseCase @Inject constructor(
|
||||
private val loginRemoteRepository: LoginRepositoryProvider,
|
||||
private val loginRemoteRepository: LoginRemoteRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) :
|
||||
BaseObservableUseCase() {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.fastaccess.github.usecase.auth
|
||||
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.LoginRemoteRepository
|
||||
import com.fastaccess.domain.response.AccessTokenResponse
|
||||
import com.fastaccess.domain.response.AuthBodyModel
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
@ -15,7 +15,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 12.05.18.
|
||||
*/
|
||||
class LoginUseCase @Inject constructor(
|
||||
private val loginRemoteRepository: LoginRepositoryProvider,
|
||||
private val loginRemoteRepository: LoginRemoteRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
private var authBodyModel: AuthBodyModel? = null
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package com.fastaccess.github.usecase.auth
|
||||
|
||||
import com.fastaccess.data.persistence.models.LoginModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.LoginRemoteRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.google.gson.Gson
|
||||
import io.reactivex.Observable
|
||||
@ -12,7 +13,8 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 12.05.18.
|
||||
*/
|
||||
class LoginWithAccessTokenUseCase @Inject constructor(
|
||||
private val loginRemoteRepository: LoginRepositoryProvider,
|
||||
private val loginRemoteRepository: LoginRemoteRepository,
|
||||
private val loginLocalRepository: LoginLocalRepository,
|
||||
private val gson: Gson,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
@ -22,9 +24,9 @@ class LoginWithAccessTokenUseCase @Inject constructor(
|
||||
.map { gson.fromJson(gson.toJson(it), LoginModel::class.java) }
|
||||
|
||||
fun insertUser(loginModel: LoginModel): Observable<LoginModel?> = Observable.fromCallable {
|
||||
loginRemoteRepository.logoutAll()
|
||||
loginRemoteRepository.insert(loginModel)
|
||||
val login = loginRemoteRepository.getLoginBlocking()
|
||||
loginLocalRepository.logoutAll()
|
||||
loginLocalRepository.insert(loginModel)
|
||||
val login = loginLocalRepository.getLoginBlocking()
|
||||
return@fromCallable if (login?.id == loginModel.id) {
|
||||
login
|
||||
} else {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.fastaccess.github.usecase.feed
|
||||
|
||||
import com.fastaccess.data.repository.FeedsRepositoryProvider
|
||||
import com.fastaccess.data.repository.FeedsRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.response.FeedResponse
|
||||
import com.fastaccess.domain.response.PageableResponse
|
||||
@ -12,7 +12,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 26.06.18.
|
||||
*/
|
||||
class FeedsUseCase @Inject constructor(
|
||||
private val feedsRepositoryProvider: FeedsRepositoryProvider,
|
||||
private val feedsRepositoryProvider: FeedsRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
var page: Int = 0
|
||||
|
||||
@ -3,8 +3,8 @@ package com.fastaccess.github.usecase.issuesprs
|
||||
import com.fastaccess.data.model.CloseOpenEventModel
|
||||
import com.fastaccess.data.model.TimelineModel
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.services.IssuePrService
|
||||
import com.fastaccess.domain.response.IssueRequestModel
|
||||
@ -18,9 +18,9 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.02.19.
|
||||
*/
|
||||
class CloseOpenIssuePrUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val issuePrService: IssuePrService,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.fastaccess.github.usecase.issuesprs
|
||||
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.services.IssuePrService
|
||||
import com.fastaccess.domain.response.IssueRequestModel
|
||||
@ -12,7 +12,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.02.19.
|
||||
*/
|
||||
class EditIssuePrUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val issuePrService: IssuePrService,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -6,7 +6,7 @@ import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.model.parcelable.FilterIssuesPrsModel
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import github.SearchIssuesQuery
|
||||
@ -17,7 +17,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 20.01.19.
|
||||
*/
|
||||
class FilterIssuesUseCase @Inject constructor(
|
||||
private val loginRepository: LoginRepositoryProvider,
|
||||
private val loginRepository: LoginLocalRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -6,6 +6,7 @@ import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.model.PageInfoModel
|
||||
import com.fastaccess.data.model.parcelable.FilterIssuesPrsModel
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
@ -17,7 +18,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 20.01.19.
|
||||
*/
|
||||
class FilterPullRequestsUseCase @Inject constructor(
|
||||
private val loginRepository: LoginRepositoryProvider,
|
||||
private val loginRepository: LoginLocalRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -5,7 +5,6 @@ import com.apollographql.apollo.api.Input
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.model.*
|
||||
import com.fastaccess.data.model.parcelable.LabelModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.fastaccess.extension.*
|
||||
@ -19,7 +18,6 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
class GetIssueTimelineUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -6,7 +6,7 @@ import com.fastaccess.data.model.CountModel
|
||||
import com.fastaccess.data.model.EmbeddedRepoModel
|
||||
import com.fastaccess.data.model.ShortUserModel
|
||||
import com.fastaccess.data.persistence.models.IssueModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.fastaccess.extension.toLabels
|
||||
@ -21,7 +21,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
class GetIssueUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -0,0 +1,67 @@
|
||||
package com.fastaccess.github.usecase.issuesprs
|
||||
|
||||
import com.apollographql.apollo.ApolloClient
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.model.CountModel
|
||||
import com.fastaccess.data.model.EmbeddedRepoModel
|
||||
import com.fastaccess.data.model.ShortUserModel
|
||||
import com.fastaccess.data.persistence.models.PullRequestModel
|
||||
import com.fastaccess.data.repository.PullRequestRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.fastaccess.extension.toLabels
|
||||
import com.fastaccess.extension.toMilestone
|
||||
import com.fastaccess.extension.toReactionGroup
|
||||
import com.fastaccess.extension.toUser
|
||||
import github.GetPullRequestQuery
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
class GetPullRequestUseCase @Inject constructor(
|
||||
private val repoProvider: PullRequestRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
var login: String? = null
|
||||
var repo: String? = null
|
||||
var number: Int? = null
|
||||
|
||||
override fun buildObservable(): Observable<*> {
|
||||
val login = login
|
||||
val repo = repo
|
||||
val number = number
|
||||
|
||||
if (login.isNullOrEmpty() || repo.isNullOrEmpty() || number == null) {
|
||||
return Observable.error<Any>(Throwable("this should never happen ;)"))
|
||||
}
|
||||
|
||||
return Rx2Apollo.from(apolloClient.query(GetPullRequestQuery(login, repo, number)))
|
||||
.subscribeOn(schedulerProvider.ioThread())
|
||||
.observeOn(schedulerProvider.uiThread())
|
||||
.map { it.data()?.repositoryOwner?.repository?.pullRequest?.fragments?.fullPullRequest }
|
||||
.map { issue ->
|
||||
repoProvider.upsert(PullRequestModel(issue.id, issue.databaseId, issue.number, issue.activeLockReason?.rawValue(),
|
||||
issue.body, issue.bodyHTML.toString(), issue.closedAt, issue.createdAt, issue.updatedAt, issue.state.rawValue(),
|
||||
issue.title, issue.viewerSubscription?.rawValue(), ShortUserModel(
|
||||
issue.author?.login, issue.author?.login,
|
||||
issue.author?.url?.toString(), avatarUrl = issue.author?.avatarUrl?.toString()
|
||||
),
|
||||
EmbeddedRepoModel(issue.repository.nameWithOwner), ShortUserModel(
|
||||
issue.mergedBy?.login, issue.mergedBy?.login,
|
||||
issue.mergedBy?.url?.toString(), avatarUrl = issue.mergedBy?.avatarUrl?.toString()
|
||||
),
|
||||
CountModel(issue.userContentEdits?.totalCount),
|
||||
issue.reactionGroups?.map { it.fragments.reactions.toReactionGroup() },
|
||||
issue.viewerCannotUpdateReasons.map { it.rawValue() }, issue.isClosed, issue.isCreatedViaEmail, issue.isLocked,
|
||||
issue.isViewerCanReact, issue.isViewerCanSubscribe, issue.isViewerCanUpdate, issue.isViewerDidAuthor,
|
||||
issue.mergeable.rawValue(), issue.isMerged, issue.mergedAt,
|
||||
issue.authorAssociation.rawValue(), issue.url.toString(), issue.labels?.nodes?.map { it.fragments.labels.toLabels() },
|
||||
issue.milestone?.toMilestone(), issue.assignees.nodes?.map { it.fragments }?.map { it.shortUserRowItem.toUser() })
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,8 +5,8 @@ import com.apollographql.apollo.api.Input
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.model.LockUnlockEventModel
|
||||
import com.fastaccess.data.model.TimelineModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import com.fastaccess.extension.me
|
||||
@ -21,9 +21,9 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.02.19.
|
||||
*/
|
||||
class LockUnlockIssuePrUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@ package com.fastaccess.github.usecase.issuesprs
|
||||
import com.fastaccess.data.model.MilestoneDemilestonedEventModel
|
||||
import com.fastaccess.data.model.TimelineModel
|
||||
import com.fastaccess.data.model.parcelable.MilestoneModel
|
||||
import com.fastaccess.data.repository.IssueRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.IssueRepository
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.services.IssuePrService
|
||||
import com.fastaccess.domain.response.IssueRequestModel
|
||||
@ -18,9 +18,9 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.02.19.
|
||||
*/
|
||||
class MilestoneIssuePrUseCase @Inject constructor(
|
||||
private val issueRepositoryProvider: IssueRepositoryProvider,
|
||||
private val issueRepositoryProvider: IssueRepository,
|
||||
private val issuePrService: IssuePrService,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.fastaccess.github.usecase.main
|
||||
|
||||
import com.fastaccess.data.repository.FeedsRepositoryProvider
|
||||
import com.fastaccess.data.repository.FeedsRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
@ -8,6 +8,6 @@ import javax.inject.Inject
|
||||
/**
|
||||
* Created by Kosh on 26.06.18.
|
||||
*/
|
||||
class FeedsMainScreenUseCase @Inject constructor(private val feedsRepositoryProvider: FeedsRepositoryProvider) : BaseObservableUseCase() {
|
||||
class FeedsMainScreenUseCase @Inject constructor(private val feedsRepositoryProvider: FeedsRepository) : BaseObservableUseCase() {
|
||||
override fun buildObservable(): Observable<*> = feedsRepositoryProvider.getMainFeeds()
|
||||
}
|
||||
@ -3,8 +3,8 @@ package com.fastaccess.github.usecase.main
|
||||
import com.apollographql.apollo.ApolloClient
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.MyIssuesPullsRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.MyIssuesPullsRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import github.GetIssuesWithoutStateQuery
|
||||
@ -16,8 +16,8 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.06.18.
|
||||
*/
|
||||
class IssuesMainScreenUseCase @Inject constructor(
|
||||
private val loginRepository: LoginRepositoryProvider,
|
||||
private val myIssues: MyIssuesPullsRepositoryProvider,
|
||||
private val loginRepository: LoginLocalRepository,
|
||||
private val myIssues: MyIssuesPullsRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -3,8 +3,8 @@ package com.fastaccess.github.usecase.main
|
||||
import com.apollographql.apollo.ApolloClient
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.persistence.models.MyIssuesPullsModel
|
||||
import com.fastaccess.data.repository.LoginRepositoryProvider
|
||||
import com.fastaccess.data.repository.MyIssuesPullsRepositoryProvider
|
||||
import com.fastaccess.data.repository.LoginLocalRepository
|
||||
import com.fastaccess.data.repository.MyIssuesPullsRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import github.GetPullRequestsQuery
|
||||
@ -16,8 +16,8 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 16.06.18.
|
||||
*/
|
||||
class PullRequestsMainScreenUseCase @Inject constructor(
|
||||
private val loginRepository: LoginRepositoryProvider,
|
||||
private val myIssues: MyIssuesPullsRepositoryProvider,
|
||||
private val loginRepository: LoginLocalRepository,
|
||||
private val myIssues: MyIssuesPullsRepository,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.fastaccess.github.usecase.notification
|
||||
|
||||
import com.fastaccess.data.persistence.models.NotificationModel
|
||||
import com.fastaccess.data.repository.NotificationRepositoryProvider
|
||||
import com.fastaccess.data.repository.NotificationRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.repository.services.NotificationService
|
||||
import com.fastaccess.domain.response.NotificationResponse
|
||||
@ -17,7 +17,7 @@ import javax.inject.Inject
|
||||
*/
|
||||
|
||||
class NotificationUseCase @Inject constructor(
|
||||
private val notificationRepositoryProvider: NotificationRepositoryProvider,
|
||||
private val notificationRepositoryProvider: NotificationRepository,
|
||||
private val notificationService: NotificationService,
|
||||
private val gson: Gson,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.fastaccess.github.usecase.user
|
||||
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.data.repository.UserRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
@ -10,7 +10,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 10.06.18.
|
||||
*/
|
||||
class BlockUnblockUserUseCase @Inject constructor(
|
||||
private val userRepository: UserRepositoryProvider,
|
||||
private val userRepository: UserRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
var login: String? = null
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.fastaccess.github.usecase.user
|
||||
|
||||
import com.fastaccess.data.repository.UserRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
@ -8,7 +8,7 @@ import javax.inject.Inject
|
||||
/**
|
||||
* Created by Kosh on 10.06.18.
|
||||
*/
|
||||
class FollowUnfollowUserUseCase @Inject constructor(private val userRepository: UserRepositoryProvider) : BaseObservableUseCase() {
|
||||
class FollowUnfollowUserUseCase @Inject constructor(private val userRepository: UserRepository) : BaseObservableUseCase() {
|
||||
var login: String? = null
|
||||
var follow: Boolean = false
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.fastaccess.github.usecase.user
|
||||
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.data.repository.UserRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
@ -10,7 +10,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 10.06.18.
|
||||
*/
|
||||
class IsUserBlockedUseCase @Inject constructor(
|
||||
private val userRepository: UserRepositoryProvider,
|
||||
private val userRepository: UserRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
var login: String? = null
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.fastaccess.github.usecase.user
|
||||
|
||||
import com.fastaccess.data.repository.FeedsRepositoryProvider
|
||||
import com.fastaccess.data.repository.FeedsRepository
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.domain.response.FeedResponse
|
||||
import com.fastaccess.domain.response.PageableResponse
|
||||
@ -12,7 +12,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 20.10.18.
|
||||
*/
|
||||
class UserFeedsUseCase @Inject constructor(
|
||||
private val feedsRepositoryProvider: FeedsRepositoryProvider,
|
||||
private val feedsRepositoryProvider: FeedsRepository,
|
||||
private val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
var page: Int = 0
|
||||
|
||||
@ -2,7 +2,7 @@ package com.fastaccess.github.usecase.user
|
||||
|
||||
import com.fastaccess.data.persistence.models.UserModel
|
||||
import com.fastaccess.data.repository.SchedulerProvider
|
||||
import com.fastaccess.data.repository.UserRepositoryProvider
|
||||
import com.fastaccess.data.repository.UserRepository
|
||||
import com.fastaccess.domain.usecase.base.BaseObservableUseCase
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
@ -11,7 +11,7 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 10.06.18.
|
||||
*/
|
||||
class UserUseCase @Inject constructor(
|
||||
private val userRepository: UserRepositoryProvider,
|
||||
private val userRepository: UserRepository,
|
||||
val schedulerProvider: SchedulerProvider
|
||||
) : BaseObservableUseCase() {
|
||||
var login: String? = null
|
||||
|
||||
@ -142,6 +142,66 @@ fragment FullIssue on Issue {
|
||||
}
|
||||
}
|
||||
|
||||
fragment FullPullRequest on PullRequest {
|
||||
id
|
||||
databaseId
|
||||
number
|
||||
title
|
||||
bodyHTML
|
||||
body
|
||||
state
|
||||
createdAt
|
||||
updatedAt
|
||||
closed
|
||||
closedAt
|
||||
locked
|
||||
activeLockReason
|
||||
viewerSubscription
|
||||
viewerDidAuthor
|
||||
viewerCannotUpdateReasons
|
||||
viewerCanUpdate
|
||||
viewerCanSubscribe
|
||||
viewerCanReact
|
||||
mergeable
|
||||
merged
|
||||
mergedAt
|
||||
mergedBy {
|
||||
avatarUrl
|
||||
login
|
||||
url
|
||||
}
|
||||
url
|
||||
userContentEdits(first: 0) {
|
||||
totalCount
|
||||
}
|
||||
author {
|
||||
avatarUrl
|
||||
login
|
||||
url
|
||||
}
|
||||
reactionGroups {
|
||||
...Reactions
|
||||
}
|
||||
createdViaEmail
|
||||
repository {
|
||||
nameWithOwner
|
||||
}
|
||||
authorAssociation
|
||||
labels(first: 30) {
|
||||
nodes {
|
||||
...Labels
|
||||
}
|
||||
}
|
||||
assignees(first: 30) {
|
||||
nodes {
|
||||
...ShortUserRowItem
|
||||
}
|
||||
}
|
||||
milestone {
|
||||
...MilestoneFragment
|
||||
}
|
||||
}
|
||||
|
||||
fragment Reactions on ReactionGroup {
|
||||
content
|
||||
createdAt
|
||||
|
||||
@ -38,6 +38,16 @@ query getIssue($login: String!, $repo: String!, $number: Int!) {
|
||||
}
|
||||
}
|
||||
|
||||
query getPullRequest($login: String!, $repo: String!, $number: Int!) {
|
||||
repositoryOwner(login: $login) {
|
||||
repository(name: $repo) {
|
||||
pullRequest(number: $number) {
|
||||
... FullPullRequest
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query getLastIssueComment($login: String!, $repo: String!, $number: Int!) {
|
||||
repositoryOwner(login: $login) {
|
||||
repository(name: $repo) {
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
package com.fastaccess.data.persistence.dao
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.paging.DataSource
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Query
|
||||
import com.fastaccess.data.persistence.models.PullRequestModel
|
||||
import io.reactivex.Maybe
|
||||
|
||||
/**
|
||||
* Created by Kosh on 06.07.18.
|
||||
*/
|
||||
@Dao
|
||||
abstract class PullRequestDao : BaseDao<PullRequestModel>() {
|
||||
@Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `state` = :state")
|
||||
abstract fun getPullRequests(repo: String, state: String): DataSource.Factory<Int, PullRequestModel>
|
||||
|
||||
@Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `id` = :id")
|
||||
abstract fun getPullRequestById(id: String): LiveData<PullRequestModel>
|
||||
|
||||
@Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `number` = :number")
|
||||
abstract fun getPullRequestByNumber(repo: String, number: Int): LiveData<PullRequestModel?>
|
||||
|
||||
@Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `number` = :number")
|
||||
abstract fun getPullRequestByNumberSingle(repo: String, number: Int): Maybe<PullRequestModel>
|
||||
|
||||
@Query("DELETE FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo") abstract fun deleteAll(repo: String)
|
||||
|
||||
@Query("DELETE FROM ${PullRequestModel.TABLE_NAME}") abstract fun deleteAll()
|
||||
}
|
||||
@ -10,19 +10,24 @@ import com.fastaccess.data.persistence.models.*
|
||||
* Created by Kosh on 11.05.18.
|
||||
*/
|
||||
|
||||
const val VERSION = 28
|
||||
const val VERSION = 29
|
||||
const val DATABASE_NAME = "FastHub-Room-DB"
|
||||
|
||||
@Database(version = VERSION, entities = [UserModel::class, MyIssuesPullsModel::class,
|
||||
NotificationModel::class, FeedModel::class, ProfileRepoModel::class,
|
||||
ProfileStarredRepoModel::class, ProfileGistModel::class,
|
||||
FollowingFollowerModel::class, OrganizationModel::class,
|
||||
IssueModel::class, SuggestionsModel::class], exportSchema = false)
|
||||
@TypeConverters(DateConverter::class, EventTypesConverter::class,
|
||||
@Database(
|
||||
version = VERSION, entities = [UserModel::class, MyIssuesPullsModel::class,
|
||||
NotificationModel::class, FeedModel::class, ProfileRepoModel::class,
|
||||
ProfileStarredRepoModel::class, ProfileGistModel::class,
|
||||
FollowingFollowerModel::class, OrganizationModel::class,
|
||||
IssueModel::class, SuggestionsModel::class,
|
||||
PullRequestModel::class], exportSchema = false
|
||||
)
|
||||
@TypeConverters(
|
||||
DateConverter::class, EventTypesConverter::class,
|
||||
FeedPayloadConverter::class, FeedRepoConverter::class,
|
||||
UserCountConverter::class, UserOrganizationConverter::class,
|
||||
UserPinnedReposModelConverter::class, ReactionGroupConverter::class,
|
||||
StringArrayConverter::class, LabelsConverter::class, ShortUserModelsConverter::class)
|
||||
StringArrayConverter::class, LabelsConverter::class, ShortUserModelsConverter::class
|
||||
)
|
||||
abstract class FastHubDatabase : RoomDatabase() {
|
||||
abstract fun getMainIssuesPullsDao(): MyIssuesPullsDao
|
||||
abstract fun getNotifications(): NotificationsDao
|
||||
@ -35,5 +40,6 @@ abstract class FastHubDatabase : RoomDatabase() {
|
||||
abstract fun getOrganizationDao(): OrgsDao
|
||||
abstract fun getIssueDao(): IssueDao
|
||||
abstract fun getSuggestionDao(): SuggestionDao
|
||||
abstract fun getPullRequestDao(): PullRequestDao
|
||||
fun clearAll() = clearAllTables()
|
||||
}
|
||||
@ -3,7 +3,10 @@ package com.fastaccess.data.persistence.models
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.fastaccess.data.model.*
|
||||
import com.fastaccess.data.model.CountModel
|
||||
import com.fastaccess.data.model.EmbeddedRepoModel
|
||||
import com.fastaccess.data.model.ReactionGroupModel
|
||||
import com.fastaccess.data.model.ShortUserModel
|
||||
import com.fastaccess.data.model.parcelable.LabelModel
|
||||
import com.fastaccess.data.model.parcelable.MilestoneModel
|
||||
import com.google.gson.annotations.SerializedName
|
||||
@ -13,13 +16,6 @@ import java.util.*
|
||||
/**
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
data class GetIssueModel(
|
||||
@SerializedName("totalCount") var totalCount: Int,
|
||||
@SerializedName("pageInfo") var pageInfoModel: PageInfoModel,
|
||||
@SerializedName("issue") var issue: IssueModel? = null,
|
||||
@SerializedName("issues") var issues: List<IssueModel>? = null
|
||||
)
|
||||
|
||||
@Entity(tableName = IssueModel.TABLE_NAME)
|
||||
data class IssueModel(
|
||||
@PrimaryKey @SerializedName("id") var id: String,
|
||||
@ -0,0 +1,58 @@
|
||||
package com.fastaccess.data.persistence.models
|
||||
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.fastaccess.data.model.CountModel
|
||||
import com.fastaccess.data.model.EmbeddedRepoModel
|
||||
import com.fastaccess.data.model.ReactionGroupModel
|
||||
import com.fastaccess.data.model.ShortUserModel
|
||||
import com.fastaccess.data.model.parcelable.LabelModel
|
||||
import com.fastaccess.data.model.parcelable.MilestoneModel
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import java.util.*
|
||||
|
||||
|
||||
/**
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
@Entity(tableName = PullRequestModel.TABLE_NAME)
|
||||
data class PullRequestModel(
|
||||
@PrimaryKey @SerializedName("id") var id: String,
|
||||
@SerializedName("databaseId") var databaseId: Int? = null,
|
||||
@SerializedName("number") var number: Int? = null,
|
||||
@SerializedName("activeLockReason") var activeLockReason: String? = null,
|
||||
@SerializedName("body") var body: String? = null,
|
||||
@SerializedName("bodyHTML") var bodyHTML: String? = null,
|
||||
@SerializedName("closedAt") var closedAt: Date? = null,
|
||||
@SerializedName("createdAt") var createdAt: Date? = null,
|
||||
@SerializedName("updatedAt") var updatedAt: Date? = null,
|
||||
@SerializedName("state") var state: String? = null,
|
||||
@SerializedName("title") var title: String? = null,
|
||||
@SerializedName("viewerSubscription") var viewerSubscription: String? = null,
|
||||
@SerializedName("author") @Embedded(prefix = "author_") var author: ShortUserModel? = null,
|
||||
@SerializedName("repository") @Embedded(prefix = "repo_") var repo: EmbeddedRepoModel? = null,
|
||||
@SerializedName("mergedBy") @Embedded(prefix = "mergedby_") var mergedBy: ShortUserModel? = null,
|
||||
@SerializedName("userContentEdits") @Embedded(prefix = "user_content_edits_") var userContentEdits: CountModel? = CountModel(),
|
||||
@SerializedName("reactionGroups") var reactionGroups: List<ReactionGroupModel>? = null,
|
||||
@SerializedName("viewerCannotUpdateReasons") var viewerCannotUpdateReasons: List<String>? = null,
|
||||
@SerializedName("closed") var closed: Boolean? = false,
|
||||
@SerializedName("createdViaEmail") var createdViaEmail: Boolean? = false,
|
||||
@SerializedName("locked") var locked: Boolean? = false,
|
||||
@SerializedName("viewerCanReact") var viewerCanReact: Boolean? = false,
|
||||
@SerializedName("viewerCanSubscribe") var viewerCanSubscribe: Boolean? = false,
|
||||
@SerializedName("viewerCanUpdate") var viewerCanUpdate: Boolean? = false,
|
||||
@SerializedName("viewerDidAuthor") var viewerDidAuthor: Boolean? = false,
|
||||
@SerializedName("mergeable") var mergeable: String? = null,
|
||||
@SerializedName("merged") var merged: Boolean? = false,
|
||||
@SerializedName("mergedAt") var mergedAt: Date? = null,
|
||||
@SerializedName("authorAssociation") var authorAssociation: String? = null,
|
||||
@SerializedName("url") var url: String? = null,
|
||||
@SerializedName("labels") var labels: List<LabelModel>? = null,
|
||||
@SerializedName("milestone") @Embedded(prefix = "milestone_") var milestone: MilestoneModel? = null,
|
||||
@SerializedName("assignees") var assignees: List<ShortUserModel>? = null
|
||||
) {
|
||||
companion object {
|
||||
const val TABLE_NAME = "pullrequest_table"
|
||||
}
|
||||
}
|
||||
@ -3,11 +3,12 @@ package com.fastaccess.data.repository
|
||||
import io.reactivex.Scheduler
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by Kosh on 2019-05-09.
|
||||
*/
|
||||
class AndroidSchedulerProvider : SchedulerProvider {
|
||||
class AndroidSchedulerProvider @Inject constructor() : SchedulerProvider {
|
||||
override fun uiThread(): Scheduler = AndroidSchedulers.mainThread()
|
||||
override fun ioThread(): Scheduler = Schedulers.io()
|
||||
override fun computationThread(): Scheduler = Schedulers.computation()
|
||||
|
||||
@ -11,15 +11,16 @@ import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 26.06.18.
|
||||
*/
|
||||
class FeedsRepositoryProvider @Inject constructor(
|
||||
private val feedsDao: FeedDao,
|
||||
private val userService: UserService,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider,
|
||||
private val gson: Gson
|
||||
private val feedsDao: FeedDao,
|
||||
private val userService: UserService,
|
||||
private val loginRepositoryProvider: LoginLocalRepository,
|
||||
private val gson: Gson
|
||||
) : FeedsRepository {
|
||||
|
||||
override fun getFeeds(login: String): DataSource.Factory<Int, FeedModel> = feedsDao.getFeeds(login)
|
||||
@ -27,44 +28,51 @@ class FeedsRepositoryProvider @Inject constructor(
|
||||
override fun deleteAll() = feedsDao.deleteAll()
|
||||
|
||||
override fun getMainFeeds(): Observable<*> = loginRepositoryProvider.getLogin()
|
||||
.filter { !it.login.isNullOrEmpty() }
|
||||
.toObservable()
|
||||
.flatMap { userService.getMainScreenReceivedEvents(it.login ?: "") }
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
feedsDao.deleteAll()
|
||||
list?.let { feedsDao.insert(it) }
|
||||
}
|
||||
.filter { !it.login.isNullOrEmpty() }
|
||||
.toObservable()
|
||||
.flatMap { userService.getMainScreenReceivedEvents(it.login ?: "") }
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
feedsDao.deleteAll()
|
||||
list?.let { feedsDao.insert(it) }
|
||||
}
|
||||
|
||||
override fun getFeeds(login: String, page: Int): Observable<PageableResponse<FeedResponse>> = userService.getUserEvents(login, page)
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
if (page <= 1) feedsDao.deleteAll(login)
|
||||
val newList = list.asSequence().map { feeds ->
|
||||
feeds.login = login
|
||||
feeds
|
||||
}.toList()
|
||||
feedsDao.insert(newList)
|
||||
return@map response
|
||||
}
|
||||
override fun getFeeds(
|
||||
login: String,
|
||||
page: Int
|
||||
): Observable<PageableResponse<FeedResponse>> = userService.getUserEvents(login, page)
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
if (page <= 1) feedsDao.deleteAll(login)
|
||||
val newList = list.asSequence().map { feeds ->
|
||||
feeds.login = login
|
||||
feeds
|
||||
}.toList()
|
||||
feedsDao.insert(newList)
|
||||
return@map response
|
||||
}
|
||||
|
||||
override fun getReceivedEvents(page: Int): Observable<PageableResponse<FeedResponse>> = loginRepositoryProvider.getLogin()
|
||||
.filter { !it.login.isNullOrEmpty() }
|
||||
.toObservable()
|
||||
.flatMap { userService.getReceivedEvents(it.login ?: "", page) }
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
if (page <= 1) feedsDao.deleteAll()
|
||||
list?.let { feedsDao.insert(it) }
|
||||
return@map response
|
||||
}
|
||||
.filter { !it.login.isNullOrEmpty() }
|
||||
.toObservable()
|
||||
.flatMap { userService.getReceivedEvents(it.login ?: "", page) }
|
||||
.map { response ->
|
||||
val list = gson.fromJson<List<FeedModel>>(gson.toJson(response.items), object : TypeToken<List<FeedModel>>() {}.type)
|
||||
if (page <= 1) feedsDao.deleteAll()
|
||||
list?.let { feedsDao.insert(it) }
|
||||
return@map response
|
||||
}
|
||||
|
||||
override fun getReceivedEventAsLiveData(): DataSource.Factory<Int, FeedModel> = feedsDao.getReceivedEventAsLiveData()
|
||||
}
|
||||
|
||||
interface FeedsRepository {
|
||||
fun getMainFeeds(): Observable<*>
|
||||
fun getFeeds(login: String, page: Int): Observable<PageableResponse<FeedResponse>>
|
||||
fun getFeeds(
|
||||
login: String,
|
||||
page: Int
|
||||
): Observable<PageableResponse<FeedResponse>>
|
||||
|
||||
fun getFeeds(login: String): DataSource.Factory<Int, FeedModel>
|
||||
fun getMainFeedsAsLiveData(): LiveData<List<FeedModel>>
|
||||
fun getReceivedEvents(page: Int): Observable<PageableResponse<FeedResponse>>
|
||||
|
||||
@ -14,10 +14,22 @@ class IssueRepositoryProvider @Inject constructor(
|
||||
private val dao: IssueDao
|
||||
) : IssueRepository {
|
||||
override fun upsert(issueModel: IssueModel) = dao.upsert(issueModel)
|
||||
override fun getIssues(repo: String, state: String): DataSource.Factory<Int, IssueModel> = dao.getIssues(repo, state)
|
||||
override fun getIssues(
|
||||
repo: String,
|
||||
state: String
|
||||
): DataSource.Factory<Int, IssueModel> = dao.getIssues(repo, state)
|
||||
|
||||
override fun getIssueById(id: String): LiveData<IssueModel> = dao.getIssueById(id)
|
||||
override fun getIssueByNumber(repo: String, number: Int): LiveData<IssueModel?> = dao.getIssueByNumber(repo, number)
|
||||
override fun getIssueByNumberMaybe(repo: String, number: Int): Maybe<IssueModel> = dao.getIssueByNumberSingle(repo, number)
|
||||
override fun getIssueByNumber(
|
||||
repo: String,
|
||||
number: Int
|
||||
): LiveData<IssueModel?> = dao.getIssueByNumber(repo, number)
|
||||
|
||||
override fun getIssueByNumberMaybe(
|
||||
repo: String,
|
||||
number: Int
|
||||
): Maybe<IssueModel> = dao.getIssueByNumberSingle(repo, number)
|
||||
|
||||
override fun deleteAll(repo: String) = dao.deleteAll(repo)
|
||||
override fun deleteAll() = dao.deleteAll()
|
||||
|
||||
@ -25,10 +37,22 @@ class IssueRepositoryProvider @Inject constructor(
|
||||
|
||||
interface IssueRepository {
|
||||
fun upsert(issueModel: IssueModel)
|
||||
fun getIssues(repo: String, state: String): DataSource.Factory<Int, IssueModel>
|
||||
fun getIssues(
|
||||
repo: String,
|
||||
state: String
|
||||
): DataSource.Factory<Int, IssueModel>
|
||||
|
||||
fun getIssueById(id: String): LiveData<IssueModel>
|
||||
fun getIssueByNumber(repo: String, number: Int): LiveData<IssueModel?>
|
||||
fun getIssueByNumberMaybe(repo: String, number: Int): Maybe<IssueModel>
|
||||
fun getIssueByNumber(
|
||||
repo: String,
|
||||
number: Int
|
||||
): LiveData<IssueModel?>
|
||||
|
||||
fun getIssueByNumberMaybe(
|
||||
repo: String,
|
||||
number: Int
|
||||
): Maybe<IssueModel>
|
||||
|
||||
fun deleteAll(repo: String)
|
||||
fun deleteAll()
|
||||
}
|
||||
@ -17,8 +17,10 @@ import javax.inject.Inject
|
||||
/**
|
||||
* Created by Kosh on 11.05.18.
|
||||
*/
|
||||
class LoginRepositoryProvider @Inject constructor(private val loginDao: LoginDao,
|
||||
private val loginService: LoginService) : LoginLocalRepository, LoginRemoteRepository {
|
||||
class LoginRepositoryProvider @Inject constructor(
|
||||
private val loginDao: LoginDao,
|
||||
private val loginService: LoginService
|
||||
) : LoginLocalRepository, LoginRemoteRepository {
|
||||
override fun getLogin(): Maybe<LoginModel?> = loginDao.getLogin()
|
||||
override fun getLoginBlocking(): LoginModel? = loginDao.getLoginBlocking()
|
||||
override fun getAllLiveData(): LiveData<LoginModel?> = loginDao.getAllLiveData()
|
||||
@ -30,10 +32,24 @@ class LoginRepositoryProvider @Inject constructor(private val loginDao: LoginDao
|
||||
override fun logoutAll() = loginDao.logoutAll()
|
||||
override fun loginAccessToken(): Observable<UserResponse> = loginService.loginAccessToken()
|
||||
override fun login(authModel: AuthBodyModel): Observable<AccessTokenResponse> = loginService.login(authModel)
|
||||
override fun getAccessToken(code: String, clientId: String, clientSecret: String, state: String,
|
||||
redirectUrl: String) = loginService.getAccessToken(
|
||||
override fun getAccessToken(
|
||||
code: String,
|
||||
clientId: String,
|
||||
clientSecret: String,
|
||||
state: String,
|
||||
redirectUrl: String
|
||||
) = loginService.getAccessToken(
|
||||
"https://github.com/login/oauth/access_token", code, clientId, clientSecret, state, redirectUrl
|
||||
)
|
||||
|
||||
override fun isMe(
|
||||
login: String,
|
||||
action: (isMe: Boolean) -> Unit
|
||||
): Disposable {
|
||||
return getLogin().subscribe({ action.invoke(login == it?.login) }, { action.invoke(false) })
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
interface LoginLocalRepository {
|
||||
@ -46,8 +62,8 @@ interface LoginLocalRepository {
|
||||
fun update(login: LoginModel): Completable
|
||||
fun deleteLogin(login: LoginModel)
|
||||
fun logoutAll()
|
||||
}
|
||||
|
||||
fun LoginRepositoryProvider.isMe(login: String, action: (isMe: Boolean) -> Unit): Disposable {
|
||||
return getLogin().subscribe({ action.invoke(login == it?.login) }, { action.invoke(false) })
|
||||
fun isMe(
|
||||
login: String,
|
||||
action: (isMe: Boolean) -> Unit
|
||||
): Disposable
|
||||
}
|
||||
@ -8,7 +8,9 @@ import javax.inject.Inject
|
||||
/**
|
||||
* Created by Kosh on 17.06.18.
|
||||
*/
|
||||
class MyIssuesPullsRepositoryProvider @Inject constructor(private val dao: MyIssuesPullsDao) : MyIssuesPullsRepository {
|
||||
class MyIssuesPullsRepositoryProvider @Inject constructor(
|
||||
private val dao: MyIssuesPullsDao
|
||||
) : MyIssuesPullsRepository {
|
||||
override fun getMainScreenIssues(): LiveData<List<MyIssuesPullsModel>> = dao.getMainScreenIssues()
|
||||
override fun getMainScreenPulls(): LiveData<List<MyIssuesPullsModel>> = dao.getMainScreenPulls()
|
||||
override fun insert(model: MyIssuesPullsModel): Long = dao.insert(model)
|
||||
|
||||
@ -19,7 +19,7 @@ import javax.inject.Inject
|
||||
class OrgRepositoryProvider @Inject constructor(
|
||||
private val dao: OrgsDao,
|
||||
private val apolloClient: ApolloClient,
|
||||
private val loginRepositoryProvider: LoginRepositoryProvider
|
||||
private val loginRepositoryProvider: LoginLocalRepository
|
||||
) : OrgRepository {
|
||||
|
||||
/**
|
||||
@ -35,7 +35,7 @@ class OrgRepositoryProvider @Inject constructor(
|
||||
return@map data
|
||||
}
|
||||
|
||||
override fun getOrgs(): DataSource.Factory<Int, OrganizationModel> = dao.getOrgs()
|
||||
override fun getOrgs(): DataSource.Factory<Int, OrganizationModel> = dao.getOrgs()
|
||||
override fun getOrgBlocking(login: String): OrganizationModel? = dao.getOrgBlocking(login)
|
||||
override fun getOrg(login: String): LiveData<OrganizationModel> = dao.getOrg(login)
|
||||
override fun deleteAll() = dao.deleteAll()
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
package com.fastaccess.data.repository
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.paging.DataSource
|
||||
import com.fastaccess.data.persistence.dao.PullRequestDao
|
||||
import com.fastaccess.data.persistence.models.PullRequestModel
|
||||
import io.reactivex.Maybe
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 27.01.19.
|
||||
*/
|
||||
class PullRequestRepositoryProvider @Inject constructor(
|
||||
private val dao: PullRequestDao
|
||||
) : PullRequestRepository {
|
||||
|
||||
override fun upsert(pr: PullRequestModel) = dao.update(pr)
|
||||
override fun getPullRequests(
|
||||
repo: String,
|
||||
state: String
|
||||
): DataSource.Factory<Int, PullRequestModel> = dao.getPullRequests(repo, state)
|
||||
|
||||
override fun getPullRequestById(id: String): LiveData<PullRequestModel> = dao.getPullRequestById(id)
|
||||
override fun getPullRequestByNumber(
|
||||
repo: String,
|
||||
number: Int
|
||||
): LiveData<PullRequestModel?> = dao.getPullRequestByNumber(repo, number)
|
||||
|
||||
override fun getPullRequestByNumberMaybe(
|
||||
repo: String,
|
||||
number: Int
|
||||
): Maybe<PullRequestModel> = dao.getPullRequestByNumberSingle(repo, number)
|
||||
|
||||
override fun deleteAll(repo: String) = dao.deleteAll(repo)
|
||||
override fun deleteAll() = dao.deleteAll()
|
||||
|
||||
}
|
||||
|
||||
interface PullRequestRepository {
|
||||
fun upsert(pr: PullRequestModel)
|
||||
fun getPullRequests(
|
||||
repo: String,
|
||||
state: String
|
||||
): DataSource.Factory<Int, PullRequestModel>
|
||||
|
||||
fun getPullRequestById(id: String): LiveData<PullRequestModel>
|
||||
fun getPullRequestByNumber(
|
||||
repo: String,
|
||||
number: Int
|
||||
): LiveData<PullRequestModel?>
|
||||
|
||||
fun getPullRequestByNumberMaybe(
|
||||
repo: String,
|
||||
number: Int
|
||||
): Maybe<PullRequestModel>
|
||||
|
||||
fun deleteAll(repo: String)
|
||||
fun deleteAll()
|
||||
}
|
||||
@ -6,6 +6,7 @@ import com.fastaccess.data.persistence.dao.SuggestionDao
|
||||
import com.fastaccess.data.persistence.models.SuggestionsModel
|
||||
import io.reactivex.Completable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 10.06.18.
|
||||
@ -22,7 +23,7 @@ class SuggestionRepositoryProvider @Inject constructor(
|
||||
|
||||
interface SuggestionRepository {
|
||||
fun getAll(): DataSource.Factory<Int, SuggestionsModel>
|
||||
fun getSuggestions(keyword: String): LiveData<List<SuggestionsModel>>
|
||||
fun getSuggestions(keyword: String): LiveData<List<SuggestionsModel>>
|
||||
fun upsert(query: String): Completable
|
||||
fun deleteAll(): Completable
|
||||
}
|
||||
|
||||
@ -17,33 +17,42 @@ import javax.inject.Inject
|
||||
* Created by Kosh on 11.10.18.
|
||||
*/
|
||||
class UserFollowersFollowingRepositoryProvider @Inject constructor(
|
||||
private val dao: UserFollowersFollowingsDao,
|
||||
private val apolloClient: ApolloClient
|
||||
private val dao: UserFollowersFollowingsDao,
|
||||
private val apolloClient: ApolloClient
|
||||
) : FollowersFollowingRepository {
|
||||
|
||||
override fun getFollowersFromRemote(login: String, page: String?): Observable<FollowingsFollowersModel> {
|
||||
override fun getFollowersFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<FollowingsFollowersModel> {
|
||||
return Rx2Apollo.from(apolloClient.query(GetProfileFollowersQuery(login, Input.optional(page))))
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = FollowingsFollowersModel.newFollowersInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login, true)
|
||||
data?.users?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = FollowingsFollowersModel.newFollowersInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login, true)
|
||||
data?.users?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
}
|
||||
|
||||
override fun getFollowingFromRemote(login: String, page: String?): Observable<FollowingsFollowersModel> {
|
||||
override fun getFollowingFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<FollowingsFollowersModel> {
|
||||
return Rx2Apollo.from(apolloClient.query(GetProfileFollowingQuery(login, Input.optional(page))))
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = FollowingsFollowersModel.newFollowingInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login, false)
|
||||
data?.users?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = FollowingsFollowersModel.newFollowingInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login, false)
|
||||
data?.users?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
}
|
||||
|
||||
override fun getFollowersOrFollowing(login: String, isFollowers: Boolean): DataSource.Factory<Int, FollowingFollowerModel> {
|
||||
override fun getFollowersOrFollowing(
|
||||
login: String,
|
||||
isFollowers: Boolean
|
||||
): DataSource.Factory<Int, FollowingFollowerModel> {
|
||||
return when (isFollowers) {
|
||||
true -> dao.getFollowers(login)
|
||||
else -> dao.getFollowing(login)
|
||||
@ -52,16 +61,34 @@ class UserFollowersFollowingRepositoryProvider @Inject constructor(
|
||||
|
||||
override fun getUser(login: String): LiveData<FollowingFollowerModel> = dao.getUser(login)
|
||||
override fun deleteAll() = dao.deleteAll()
|
||||
override fun deleteAll(login: String, isFollowers: Boolean) = dao.deleteAll(login, isFollowers)
|
||||
override fun deleteAll(
|
||||
login: String,
|
||||
isFollowers: Boolean
|
||||
) = dao.deleteAll(login, isFollowers)
|
||||
|
||||
}
|
||||
|
||||
interface FollowersFollowingRepository {
|
||||
fun getFollowersFromRemote(login: String, page: String?): Observable<FollowingsFollowersModel>
|
||||
fun getFollowingFromRemote(login: String, page: String?): Observable<FollowingsFollowersModel>
|
||||
fun getFollowersOrFollowing(login: String, isFollowers: Boolean): DataSource.Factory<Int, FollowingFollowerModel>
|
||||
fun getFollowersFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<FollowingsFollowersModel>
|
||||
|
||||
fun getFollowingFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<FollowingsFollowersModel>
|
||||
|
||||
fun getFollowersOrFollowing(
|
||||
login: String,
|
||||
isFollowers: Boolean
|
||||
): DataSource.Factory<Int, FollowingFollowerModel>
|
||||
|
||||
fun getUser(login: String): LiveData<FollowingFollowerModel>
|
||||
fun deleteAll()
|
||||
fun deleteAll(login: String, isFollowers: Boolean)
|
||||
fun deleteAll(
|
||||
login: String,
|
||||
isFollowers: Boolean
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@ -6,29 +6,33 @@ import com.apollographql.apollo.ApolloClient
|
||||
import com.apollographql.apollo.api.Input
|
||||
import com.apollographql.apollo.rx2.Rx2Apollo
|
||||
import com.fastaccess.data.persistence.dao.UserGistsDao
|
||||
import com.fastaccess.data.persistence.models.ProfileGistModel
|
||||
import com.fastaccess.data.persistence.models.GistsModel
|
||||
import com.fastaccess.data.persistence.models.ProfileGistModel
|
||||
import github.GetProfileGistsQuery
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 11.10.18.
|
||||
*/
|
||||
class UserGistsRepositoryProvider @Inject constructor(
|
||||
private val dao: UserGistsDao,
|
||||
private val apolloClient: ApolloClient
|
||||
private val dao: UserGistsDao,
|
||||
private val apolloClient: ApolloClient
|
||||
) : UserGistsRepository {
|
||||
|
||||
override fun getGistsFromRemote(login: String, page: String?): Observable<GistsModel> {
|
||||
override fun getGistsFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<GistsModel> {
|
||||
return Rx2Apollo.from(apolloClient.query(GetProfileGistsQuery(login, Input.optional(page))))
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = GistsModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login)
|
||||
data?.gists?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = GistsModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) dao.deleteAll(login)
|
||||
data?.gists?.let { repos -> dao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -40,7 +44,11 @@ class UserGistsRepositoryProvider @Inject constructor(
|
||||
}
|
||||
|
||||
interface UserGistsRepository {
|
||||
fun getGistsFromRemote(login: String, page: String?): Observable<GistsModel>
|
||||
fun getGistsFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<GistsModel>
|
||||
|
||||
fun getGists(login: String): DataSource.Factory<Int, ProfileGistModel>
|
||||
fun getGist(id: String): LiveData<ProfileGistModel>
|
||||
fun deleteAll()
|
||||
|
||||
@ -11,24 +11,28 @@ import com.fastaccess.data.persistence.models.ProfileReposModel
|
||||
import github.GetProfileReposQuery
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 11.10.18.
|
||||
*/
|
||||
class UserReposRepositoryProvider @Inject constructor(
|
||||
private val reposDao: UserReposDao,
|
||||
private val apolloClient: ApolloClient
|
||||
private val reposDao: UserReposDao,
|
||||
private val apolloClient: ApolloClient
|
||||
) : UserReposRepository {
|
||||
|
||||
override fun getReposFromRemote(login: String, page: String?): Observable<ProfileReposModel> {
|
||||
override fun getReposFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<ProfileReposModel> {
|
||||
return Rx2Apollo.from(apolloClient.query(GetProfileReposQuery(login, Input.optional(page))))
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = ProfileReposModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) reposDao.deleteAll(login)
|
||||
data?.repos?.let { repos -> reposDao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = ProfileReposModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) reposDao.deleteAll(login)
|
||||
data?.repos?.let { repos -> reposDao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -40,7 +44,11 @@ class UserReposRepositoryProvider @Inject constructor(
|
||||
}
|
||||
|
||||
interface UserReposRepository {
|
||||
fun getReposFromRemote(login: String, page: String?): Observable<ProfileReposModel>
|
||||
fun getReposFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<ProfileReposModel>
|
||||
|
||||
fun getRepos(login: String): DataSource.Factory<Int, ProfileRepoModel>
|
||||
fun getRepo(id: String): LiveData<ProfileRepoModel>
|
||||
fun deleteAll()
|
||||
|
||||
@ -12,6 +12,7 @@ import github.GetProfileQuery
|
||||
import io.reactivex.Observable
|
||||
import retrofit2.Response
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 10.06.18.
|
||||
|
||||
@ -11,24 +11,28 @@ import com.fastaccess.data.persistence.models.ProfileStarredReposModel
|
||||
import github.GetProfileStarredReposQuery
|
||||
import io.reactivex.Observable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Created by Kosh on 11.10.18.
|
||||
*/
|
||||
class UserStarredReposRepositoryProvider @Inject constructor(
|
||||
private val reposDao: UserStarredReposDao,
|
||||
private val apolloClient: ApolloClient
|
||||
private val reposDao: UserStarredReposDao,
|
||||
private val apolloClient: ApolloClient
|
||||
) : UserStarredReposRepository {
|
||||
|
||||
override fun getStarredReposFromRemote(login: String, page: String?): Observable<ProfileStarredReposModel> {
|
||||
override fun getStarredReposFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<ProfileStarredReposModel> {
|
||||
return Rx2Apollo.from(apolloClient.query(GetProfileStarredReposQuery(login, Input.optional(page))))
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = ProfileStarredReposModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) reposDao.deleteAll(login)
|
||||
data?.repos?.let { repos -> reposDao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
.filter { !it.hasErrors() }
|
||||
.map {
|
||||
val data = ProfileStarredReposModel.newInstance(it.data(), login)
|
||||
if (page.isNullOrBlank()) reposDao.deleteAll(login)
|
||||
data?.repos?.let { repos -> reposDao.insert(repos) }
|
||||
return@map data
|
||||
}
|
||||
}
|
||||
|
||||
override fun getStarredRepos(login: String): DataSource.Factory<Int, ProfileStarredRepoModel> = reposDao.getStarredRepos(login)
|
||||
@ -39,7 +43,11 @@ class UserStarredReposRepositoryProvider @Inject constructor(
|
||||
}
|
||||
|
||||
interface UserStarredReposRepository {
|
||||
fun getStarredReposFromRemote(login: String, page: String?): Observable<ProfileStarredReposModel>
|
||||
fun getStarredReposFromRemote(
|
||||
login: String,
|
||||
page: String?
|
||||
): Observable<ProfileStarredReposModel>
|
||||
|
||||
fun getStarredRepos(login: String): DataSource.Factory<Int, ProfileStarredRepoModel>
|
||||
fun getStarredRepo(id: String): LiveData<ProfileStarredRepoModel>
|
||||
fun deleteAll()
|
||||
|
||||
@ -36,4 +36,7 @@ fun Labels?.toLabels(): LabelModel = LabelModel(this?.name, this?.color, this?.u
|
||||
|
||||
fun FullIssue.Milestone.toMilestone(): MilestoneModel = this.fragments.milestoneFragment.let {
|
||||
MilestoneModel(it.id, it.title, it.description, it.state.rawValue(), it.url.toString(), it.number, it.isClosed, it.dueOn)
|
||||
}
|
||||
fun FullPullRequest.Milestone.toMilestone(): MilestoneModel = this.fragments.milestoneFragment.let {
|
||||
MilestoneModel(it.id, it.title, it.description, it.state.rawValue(), it.url.toString(), it.number, it.isClosed, it.dueOn)
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user