diff --git a/app/src/main/java/com/fastaccess/github/di/components/AppComponent.kt b/app/src/main/java/com/fastaccess/github/di/components/AppComponent.kt index b440815f..69d944b0 100644 --- a/app/src/main/java/com/fastaccess/github/di/components/AppComponent.kt +++ b/app/src/main/java/com/fastaccess/github/di/components/AppComponent.kt @@ -22,8 +22,8 @@ import javax.inject.Singleton FastHubDatabaseModule::class, NetworkModule::class, RepositoryModule::class, - ActivityBindingModule::class, - RepositoryModule::class ] + ActivityBindingModule::class + ] ) interface AppComponent : AndroidInjector { @@ -32,7 +32,6 @@ interface AppComponent : AndroidInjector { @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 { .application(app) .fastHubDatabaseModule(FastHubDatabaseModule()) .networkModule(NetworkModule()) - .repoModule(RepositoryModule()) .repositoryModule(RepositoryModule()) .build() } diff --git a/app/src/main/java/com/fastaccess/github/di/modules/FastHubDatabaseModule.kt b/app/src/main/java/com/fastaccess/github/di/modules/FastHubDatabaseModule.kt index a1f40e99..611aef44 100644 --- a/app/src/main/java/com/fastaccess/github/di/modules/FastHubDatabaseModule.kt +++ b/app/src/main/java/com/fastaccess/github/di/modules/FastHubDatabaseModule.kt @@ -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() diff --git a/app/src/main/java/com/fastaccess/github/di/modules/RepositoryModule.kt b/app/src/main/java/com/fastaccess/github/di/modules/RepositoryModule.kt index 8f145d9d..1f46ac8b 100644 --- a/app/src/main/java/com/fastaccess/github/di/modules/RepositoryModule.kt +++ b/app/src/main/java/com/fastaccess/github/di/modules/RepositoryModule.kt @@ -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()) } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/github/platform/works/MarkAsReadNotificationWorker.kt b/app/src/main/java/com/fastaccess/github/platform/works/MarkAsReadNotificationWorker.kt index 0d652d46..dd2167e5 100644 --- a/app/src/main/java/com/fastaccess/github/platform/works/MarkAsReadNotificationWorker.kt +++ b/app/src/main/java/com/fastaccess/github/platform/works/MarkAsReadNotificationWorker.kt @@ -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 { val id = workerParams.inputData.getString(EXTRA) diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/auth/LoginChooserViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/auth/LoginChooserViewModel.kt index 303019d0..91970665 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/auth/LoginChooserViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/auth/LoginChooserViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/feed/fragment/viewmodel/FeedsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/feed/fragment/viewmodel/FeedsViewModel.kt index c0bc0033..5ce81c36 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/feed/fragment/viewmodel/FeedsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/feed/fragment/viewmodel/FeedsViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/issue/fragment/viewmodel/IssueTimelineViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/issue/fragment/viewmodel/IssueTimelineViewModel.kt index b2fffba5..3d073b73 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/issue/fragment/viewmodel/IssueTimelineViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/issue/fragment/viewmodel/IssueTimelineViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/main/fragment/viewmodel/MainFragmentViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/main/fragment/viewmodel/MainFragmentViewModel.kt index 29598e19..f7ce09da 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/main/fragment/viewmodel/MainFragmentViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/main/fragment/viewmodel/MainFragmentViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/read/AllNotificationsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/read/AllNotificationsViewModel.kt index ffbb898c..da27e3d8 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/read/AllNotificationsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/read/AllNotificationsViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/unread/viewmodel/UnreadNotificationsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/unread/viewmodel/UnreadNotificationsViewModel.kt index 7c8fa6c0..87d7742e 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/unread/viewmodel/UnreadNotificationsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/notifications/fragment/unread/viewmodel/UnreadNotificationsViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/feeds/viewmodel/ProfileFeedsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/feeds/viewmodel/ProfileFeedsViewModel.kt index fd02f153..3a04f05b 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/feeds/viewmodel/ProfileFeedsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/feeds/viewmodel/ProfileFeedsViewModel.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/followersandfollowings/viewmodel/FollowersFollowingViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/followersandfollowings/viewmodel/FollowersFollowingViewModel.kt index 993358f2..d49a7c6b 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/followersandfollowings/viewmodel/FollowersFollowingViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/followersandfollowings/viewmodel/FollowersFollowingViewModel.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/fragment/ProfileFragment.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/fragment/ProfileFragment.kt index dcf2fa9d..97e364ed 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/fragment/ProfileFragment.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/fragment/ProfileFragment.kt @@ -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) } diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/gists/viewmodel/ProfileGistsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/gists/viewmodel/ProfileGistsViewModel.kt index 5a99eea0..0d7b7e4c 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/gists/viewmodel/ProfileGistsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/gists/viewmodel/ProfileGistsViewModel.kt @@ -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> { 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 diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/orgs/userorgs/viewmodel/UserOrgsViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/orgs/userorgs/viewmodel/UserOrgsViewModel.kt index fb73b4b4..ed39f248 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/orgs/userorgs/viewmodel/UserOrgsViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/orgs/userorgs/viewmodel/UserOrgsViewModel.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/repos/viewmodel/ProfileReposViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/repos/viewmodel/ProfileReposViewModel.kt index 9c266921..7d17b743 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/repos/viewmodel/ProfileReposViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/repos/viewmodel/ProfileReposViewModel.kt @@ -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> { 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 diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/profile/starred/viewmodel/ProfileStarredReposViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/profile/starred/viewmodel/ProfileStarredReposViewModel.kt index 9cd3b95b..fb5da7ee 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/profile/starred/viewmodel/ProfileStarredReposViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/profile/starred/viewmodel/ProfileStarredReposViewModel.kt @@ -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> { 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 diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/search/fragment/viewmodel/FilterSearchViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/search/fragment/viewmodel/FilterSearchViewModel.kt index e501ba97..4771fb06 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/search/fragment/viewmodel/FilterSearchViewModel.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/search/fragment/viewmodel/FilterSearchViewModel.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/auth/GetAccessTokenUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/auth/GetAccessTokenUseCase.kt index 9cf2b846..4f63b0cb 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/auth/GetAccessTokenUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/auth/GetAccessTokenUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/auth/LoginUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/auth/LoginUseCase.kt index 85d7e98d..6e12d940 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/auth/LoginUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/auth/LoginUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/auth/LoginWithAccessTokenUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/auth/LoginWithAccessTokenUseCase.kt index 61d407bc..5387a4d1 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/auth/LoginWithAccessTokenUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/auth/LoginWithAccessTokenUseCase.kt @@ -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 = 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 { diff --git a/app/src/main/java/com/fastaccess/github/usecase/feed/FeedsUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/feed/FeedsUseCase.kt index ea6d3763..0604c479 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/feed/FeedsUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/feed/FeedsUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/CloseOpenIssuePrUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/CloseOpenIssuePrUseCase.kt index 2fd86aa1..1fd670ed 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/CloseOpenIssuePrUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/CloseOpenIssuePrUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/EditIssuePrUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/EditIssuePrUseCase.kt index 820dd098..117bbda7 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/EditIssuePrUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/EditIssuePrUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterIssuesUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterIssuesUseCase.kt index 08322248..bd7e3870 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterIssuesUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterIssuesUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterPullRequestsUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterPullRequestsUseCase.kt index 5b1460d7..834d790b 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterPullRequestsUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/FilterPullRequestsUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueTimelineUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueTimelineUseCase.kt index a31bc8f8..642c0a49 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueTimelineUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueTimelineUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueUseCase.kt index da4f86fa..9d3a3c05 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetIssueUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetPullRequestUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetPullRequestUseCase.kt new file mode 100644 index 00000000..197dd222 --- /dev/null +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/GetPullRequestUseCase.kt @@ -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(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() }) + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/LockUnlockIssuePrUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/LockUnlockIssuePrUseCase.kt index ee65fc0a..ddf4c499 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/LockUnlockIssuePrUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/LockUnlockIssuePrUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/MilestoneIssuePrUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/MilestoneIssuePrUseCase.kt index 40d4aa78..fff5a5d2 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/issuesprs/MilestoneIssuePrUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/issuesprs/MilestoneIssuePrUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/main/FeedsMainScreenUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/main/FeedsMainScreenUseCase.kt index 4dd3284b..90fddd27 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/main/FeedsMainScreenUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/main/FeedsMainScreenUseCase.kt @@ -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() } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/github/usecase/main/IssuesMainScreenUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/main/IssuesMainScreenUseCase.kt index c629dad0..016ea72f 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/main/IssuesMainScreenUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/main/IssuesMainScreenUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/main/PullRequestsMainScreenUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/main/PullRequestsMainScreenUseCase.kt index 2075bcc5..9db1e82f 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/main/PullRequestsMainScreenUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/main/PullRequestsMainScreenUseCase.kt @@ -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() { diff --git a/app/src/main/java/com/fastaccess/github/usecase/notification/NotificationUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/notification/NotificationUseCase.kt index 480d1597..2d5beefe 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/notification/NotificationUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/notification/NotificationUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/user/BlockUnblockUserUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/user/BlockUnblockUserUseCase.kt index 32e598b8..d9b762d8 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/user/BlockUnblockUserUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/user/BlockUnblockUserUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/user/FollowUnfollowUserUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/user/FollowUnfollowUserUseCase.kt index c3877953..6af1ea5c 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/user/FollowUnfollowUserUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/user/FollowUnfollowUserUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/user/IsUserBlockedUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/user/IsUserBlockedUseCase.kt index f9a5acc7..3e22503c 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/user/IsUserBlockedUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/user/IsUserBlockedUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/user/UserFeedsUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/user/UserFeedsUseCase.kt index 36458ec3..f3420109 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/user/UserFeedsUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/user/UserFeedsUseCase.kt @@ -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 diff --git a/app/src/main/java/com/fastaccess/github/usecase/user/UserUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/user/UserUseCase.kt index 8f23e2c2..c5f95053 100644 --- a/app/src/main/java/com/fastaccess/github/usecase/user/UserUseCase.kt +++ b/app/src/main/java/com/fastaccess/github/usecase/user/UserUseCase.kt @@ -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 diff --git a/data/src/main/graphql/github/fragments.graphql b/data/src/main/graphql/github/fragments.graphql index 5484b987..10434bbe 100644 --- a/data/src/main/graphql/github/fragments.graphql +++ b/data/src/main/graphql/github/fragments.graphql @@ -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 diff --git a/data/src/main/graphql/github/issues_prs.graphql b/data/src/main/graphql/github/issues_prs.graphql index a15d4d62..1b87c702 100644 --- a/data/src/main/graphql/github/issues_prs.graphql +++ b/data/src/main/graphql/github/issues_prs.graphql @@ -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) { diff --git a/data/src/main/java/com/fastaccess/data/persistence/dao/PullRequestDao.kt b/data/src/main/java/com/fastaccess/data/persistence/dao/PullRequestDao.kt new file mode 100644 index 00000000..9f6b95b8 --- /dev/null +++ b/data/src/main/java/com/fastaccess/data/persistence/dao/PullRequestDao.kt @@ -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() { + @Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `state` = :state") + abstract fun getPullRequests(repo: String, state: String): DataSource.Factory + + @Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `id` = :id") + abstract fun getPullRequestById(id: String): LiveData + + @Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `number` = :number") + abstract fun getPullRequestByNumber(repo: String, number: Int): LiveData + + @Query("SELECT * FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo AND `number` = :number") + abstract fun getPullRequestByNumberSingle(repo: String, number: Int): Maybe + + @Query("DELETE FROM ${PullRequestModel.TABLE_NAME} WHERE `repo_nameWithOwner` = :repo") abstract fun deleteAll(repo: String) + + @Query("DELETE FROM ${PullRequestModel.TABLE_NAME}") abstract fun deleteAll() +} \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/persistence/db/FastHubDatabase.kt b/data/src/main/java/com/fastaccess/data/persistence/db/FastHubDatabase.kt index 761b0dd0..b52e1a4f 100644 --- a/data/src/main/java/com/fastaccess/data/persistence/db/FastHubDatabase.kt +++ b/data/src/main/java/com/fastaccess/data/persistence/db/FastHubDatabase.kt @@ -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() } \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/persistence/models/GetIssueModel.kt b/data/src/main/java/com/fastaccess/data/persistence/models/IssueModel.kt similarity index 89% rename from data/src/main/java/com/fastaccess/data/persistence/models/GetIssueModel.kt rename to data/src/main/java/com/fastaccess/data/persistence/models/IssueModel.kt index 28079ed9..de98639f 100644 --- a/data/src/main/java/com/fastaccess/data/persistence/models/GetIssueModel.kt +++ b/data/src/main/java/com/fastaccess/data/persistence/models/IssueModel.kt @@ -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? = null -) - @Entity(tableName = IssueModel.TABLE_NAME) data class IssueModel( @PrimaryKey @SerializedName("id") var id: String, diff --git a/data/src/main/java/com/fastaccess/data/persistence/models/PullRequestModel.kt b/data/src/main/java/com/fastaccess/data/persistence/models/PullRequestModel.kt new file mode 100644 index 00000000..0f0c9b2e --- /dev/null +++ b/data/src/main/java/com/fastaccess/data/persistence/models/PullRequestModel.kt @@ -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? = null, + @SerializedName("viewerCannotUpdateReasons") var viewerCannotUpdateReasons: List? = 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? = null, + @SerializedName("milestone") @Embedded(prefix = "milestone_") var milestone: MilestoneModel? = null, + @SerializedName("assignees") var assignees: List? = null +) { + companion object { + const val TABLE_NAME = "pullrequest_table" + } +} diff --git a/data/src/main/java/com/fastaccess/data/repository/AndroidSchedulerProvider.kt b/data/src/main/java/com/fastaccess/data/repository/AndroidSchedulerProvider.kt index 6f0cfa89..e63c0f88 100644 --- a/data/src/main/java/com/fastaccess/data/repository/AndroidSchedulerProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/AndroidSchedulerProvider.kt @@ -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() diff --git a/data/src/main/java/com/fastaccess/data/repository/FeedsRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/FeedsRepositoryProvider.kt index 1fc8deb4..68814bde 100644 --- a/data/src/main/java/com/fastaccess/data/repository/FeedsRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/FeedsRepositoryProvider.kt @@ -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 = 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>(gson.toJson(response.items), object : TypeToken>() {}.type) - feedsDao.deleteAll() - list?.let { feedsDao.insert(it) } - } + .filter { !it.login.isNullOrEmpty() } + .toObservable() + .flatMap { userService.getMainScreenReceivedEvents(it.login ?: "") } + .map { response -> + val list = gson.fromJson>(gson.toJson(response.items), object : TypeToken>() {}.type) + feedsDao.deleteAll() + list?.let { feedsDao.insert(it) } + } - override fun getFeeds(login: String, page: Int): Observable> = userService.getUserEvents(login, page) - .map { response -> - val list = gson.fromJson>(gson.toJson(response.items), object : TypeToken>() {}.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> = userService.getUserEvents(login, page) + .map { response -> + val list = gson.fromJson>(gson.toJson(response.items), object : TypeToken>() {}.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> = loginRepositoryProvider.getLogin() - .filter { !it.login.isNullOrEmpty() } - .toObservable() - .flatMap { userService.getReceivedEvents(it.login ?: "", page) } - .map { response -> - val list = gson.fromJson>(gson.toJson(response.items), object : TypeToken>() {}.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>(gson.toJson(response.items), object : TypeToken>() {}.type) + if (page <= 1) feedsDao.deleteAll() + list?.let { feedsDao.insert(it) } + return@map response + } override fun getReceivedEventAsLiveData(): DataSource.Factory = feedsDao.getReceivedEventAsLiveData() } interface FeedsRepository { fun getMainFeeds(): Observable<*> - fun getFeeds(login: String, page: Int): Observable> + fun getFeeds( + login: String, + page: Int + ): Observable> + fun getFeeds(login: String): DataSource.Factory fun getMainFeedsAsLiveData(): LiveData> fun getReceivedEvents(page: Int): Observable> diff --git a/data/src/main/java/com/fastaccess/data/repository/IssueRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/IssueRepositoryProvider.kt index 69c3d401..27c6ca93 100644 --- a/data/src/main/java/com/fastaccess/data/repository/IssueRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/IssueRepositoryProvider.kt @@ -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 = dao.getIssues(repo, state) + override fun getIssues( + repo: String, + state: String + ): DataSource.Factory = dao.getIssues(repo, state) + override fun getIssueById(id: String): LiveData = dao.getIssueById(id) - override fun getIssueByNumber(repo: String, number: Int): LiveData = dao.getIssueByNumber(repo, number) - override fun getIssueByNumberMaybe(repo: String, number: Int): Maybe = dao.getIssueByNumberSingle(repo, number) + override fun getIssueByNumber( + repo: String, + number: Int + ): LiveData = dao.getIssueByNumber(repo, number) + + override fun getIssueByNumberMaybe( + repo: String, + number: Int + ): Maybe = 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 + fun getIssues( + repo: String, + state: String + ): DataSource.Factory + fun getIssueById(id: String): LiveData - fun getIssueByNumber(repo: String, number: Int): LiveData - fun getIssueByNumberMaybe(repo: String, number: Int): Maybe + fun getIssueByNumber( + repo: String, + number: Int + ): LiveData + + fun getIssueByNumberMaybe( + repo: String, + number: Int + ): Maybe + fun deleteAll(repo: String) fun deleteAll() } \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/repository/LoginRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/LoginRepositoryProvider.kt index ee57b1c7..b7282f77 100644 --- a/data/src/main/java/com/fastaccess/data/repository/LoginRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/LoginRepositoryProvider.kt @@ -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 = loginDao.getLogin() override fun getLoginBlocking(): LoginModel? = loginDao.getLoginBlocking() override fun getAllLiveData(): LiveData = loginDao.getAllLiveData() @@ -30,10 +32,24 @@ class LoginRepositoryProvider @Inject constructor(private val loginDao: LoginDao override fun logoutAll() = loginDao.logoutAll() override fun loginAccessToken(): Observable = loginService.loginAccessToken() override fun login(authModel: AuthBodyModel): Observable = 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 } \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/repository/MyIssuesPullsRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/MyIssuesPullsRepositoryProvider.kt index fd4e6600..be50e615 100644 --- a/data/src/main/java/com/fastaccess/data/repository/MyIssuesPullsRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/MyIssuesPullsRepositoryProvider.kt @@ -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> = dao.getMainScreenIssues() override fun getMainScreenPulls(): LiveData> = dao.getMainScreenPulls() override fun insert(model: MyIssuesPullsModel): Long = dao.insert(model) diff --git a/data/src/main/java/com/fastaccess/data/repository/OrgRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/OrgRepositoryProvider.kt index 75f4115a..58ec61ef 100644 --- a/data/src/main/java/com/fastaccess/data/repository/OrgRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/OrgRepositoryProvider.kt @@ -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 = dao.getOrgs() + override fun getOrgs(): DataSource.Factory = dao.getOrgs() override fun getOrgBlocking(login: String): OrganizationModel? = dao.getOrgBlocking(login) override fun getOrg(login: String): LiveData = dao.getOrg(login) override fun deleteAll() = dao.deleteAll() diff --git a/data/src/main/java/com/fastaccess/data/repository/PullRequestRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/PullRequestRepositoryProvider.kt new file mode 100644 index 00000000..e7365d7e --- /dev/null +++ b/data/src/main/java/com/fastaccess/data/repository/PullRequestRepositoryProvider.kt @@ -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 = dao.getPullRequests(repo, state) + + override fun getPullRequestById(id: String): LiveData = dao.getPullRequestById(id) + override fun getPullRequestByNumber( + repo: String, + number: Int + ): LiveData = dao.getPullRequestByNumber(repo, number) + + override fun getPullRequestByNumberMaybe( + repo: String, + number: Int + ): Maybe = 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 + + fun getPullRequestById(id: String): LiveData + fun getPullRequestByNumber( + repo: String, + number: Int + ): LiveData + + fun getPullRequestByNumberMaybe( + repo: String, + number: Int + ): Maybe + + fun deleteAll(repo: String) + fun deleteAll() +} \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/repository/SuggestionRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/SuggestionRepositoryProvider.kt index f4160df7..c1e09ea8 100644 --- a/data/src/main/java/com/fastaccess/data/repository/SuggestionRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/SuggestionRepositoryProvider.kt @@ -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 - fun getSuggestions(keyword: String): LiveData> + fun getSuggestions(keyword: String): LiveData> fun upsert(query: String): Completable fun deleteAll(): Completable } diff --git a/data/src/main/java/com/fastaccess/data/repository/UserFollowersFollowingRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/UserFollowersFollowingRepositoryProvider.kt index cc0e95f5..1807910a 100644 --- a/data/src/main/java/com/fastaccess/data/repository/UserFollowersFollowingRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/UserFollowersFollowingRepositoryProvider.kt @@ -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 { + override fun getFollowersFromRemote( + login: String, + page: String? + ): Observable { 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 { + override fun getFollowingFromRemote( + login: String, + page: String? + ): Observable { 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 { + override fun getFollowersOrFollowing( + login: String, + isFollowers: Boolean + ): DataSource.Factory { 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 = 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 - fun getFollowingFromRemote(login: String, page: String?): Observable - fun getFollowersOrFollowing(login: String, isFollowers: Boolean): DataSource.Factory + fun getFollowersFromRemote( + login: String, + page: String? + ): Observable + + fun getFollowingFromRemote( + login: String, + page: String? + ): Observable + + fun getFollowersOrFollowing( + login: String, + isFollowers: Boolean + ): DataSource.Factory + fun getUser(login: String): LiveData fun deleteAll() - fun deleteAll(login: String, isFollowers: Boolean) + fun deleteAll( + login: String, + isFollowers: Boolean + ) } diff --git a/data/src/main/java/com/fastaccess/data/repository/UserGistsRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/UserGistsRepositoryProvider.kt index 2625fc71..dce70c1e 100644 --- a/data/src/main/java/com/fastaccess/data/repository/UserGistsRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/UserGistsRepositoryProvider.kt @@ -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 { + override fun getGistsFromRemote( + login: String, + page: String? + ): Observable { 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 + fun getGistsFromRemote( + login: String, + page: String? + ): Observable + fun getGists(login: String): DataSource.Factory fun getGist(id: String): LiveData fun deleteAll() diff --git a/data/src/main/java/com/fastaccess/data/repository/UserReposRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/UserReposRepositoryProvider.kt index 7b65fae9..60da44d8 100644 --- a/data/src/main/java/com/fastaccess/data/repository/UserReposRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/UserReposRepositoryProvider.kt @@ -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 { + override fun getReposFromRemote( + login: String, + page: String? + ): Observable { 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 + fun getReposFromRemote( + login: String, + page: String? + ): Observable + fun getRepos(login: String): DataSource.Factory fun getRepo(id: String): LiveData fun deleteAll() diff --git a/data/src/main/java/com/fastaccess/data/repository/UserRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/UserRepositoryProvider.kt index 7326e5db..c7befa3c 100644 --- a/data/src/main/java/com/fastaccess/data/repository/UserRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/UserRepositoryProvider.kt @@ -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. diff --git a/data/src/main/java/com/fastaccess/data/repository/UserStarredReposRepositoryProvider.kt b/data/src/main/java/com/fastaccess/data/repository/UserStarredReposRepositoryProvider.kt index c760825e..2d0155db 100644 --- a/data/src/main/java/com/fastaccess/data/repository/UserStarredReposRepositoryProvider.kt +++ b/data/src/main/java/com/fastaccess/data/repository/UserStarredReposRepositoryProvider.kt @@ -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 { + override fun getStarredReposFromRemote( + login: String, + page: String? + ): Observable { 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 = reposDao.getStarredRepos(login) @@ -39,7 +43,11 @@ class UserStarredReposRepositoryProvider @Inject constructor( } interface UserStarredReposRepository { - fun getStarredReposFromRemote(login: String, page: String?): Observable + fun getStarredReposFromRemote( + login: String, + page: String? + ): Observable + fun getStarredRepos(login: String): DataSource.Factory fun getStarredRepo(id: String): LiveData fun deleteAll() diff --git a/data/src/main/java/com/fastaccess/extension/GraphqlFragmentExtension.kt b/data/src/main/java/com/fastaccess/extension/GraphqlFragmentExtension.kt index c9856c6f..4c397c43 100644 --- a/data/src/main/java/com/fastaccess/extension/GraphqlFragmentExtension.kt +++ b/data/src/main/java/com/fastaccess/extension/GraphqlFragmentExtension.kt @@ -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) } \ No newline at end of file