// Path: app/src/main/java/io/github/kobakei/anago/entity/Repo.java
// public class Repo {
//     public long id;
//     public String name;
//     public String full_name;
//     public String description;
//     public int stargazers_count;
//     public User owner;
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/repository/RepoRepository.java
// @Singleton
// public class RepoRepository extends Repository<String, Repo> {
// 
//     private final GitHubApiClient gitHubApiClient;
//     private final AuthTokenDao authTokenDao;
// 
//     @Inject
//     public RepoRepository(GitHubApiClient gitHubApiClient, AuthTokenDao authTokenDao) {
//         super();
//         this.gitHubApiClient = gitHubApiClient;
//         this.authTokenDao = authTokenDao;
//     }
// 
//     public Single<List<Repo>> getPublicRepos(int page, int perPage) {
//         return gitHubApiClient.getPublicRepos(page, perPage);
//     }
// 
//     public Single<List<Repo>> getUserRepos(int page, int perPage) {
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getUserRepos(header, page, perPage);
//                 })
//                 .doOnSuccess(repos1 -> {
//                     for (Repo repo : repos1) {
//                         getCache().put(repo.full_name, repo);
//                     }
//                 });
//     }
// 
//     public Single<List<Repo>> getStarredRepos(int page, int perPage) {
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getStarredRepos(header, page, perPage);
//                 })
//                 .doOnSuccess(repos1 -> {
//                     for (Repo repo : repos1) {
//                         getCache().put(repo.full_name, repo);
//                     }
//                 });
//     }
// 
//     public Single<Repo> getByFullname(String user, String repo) {
//         String fullname = user + "/" + repo;
//         if (getCache().containsKey(fullname)) {
//             return Single.just(getCache().get(fullname));
//         }
//         return gitHubApiClient.getRepo(user, repo);
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/repository/StarRepository.java
// @Singleton
// public class StarRepository extends Repository<String, Boolean> {
// 
//     private final GitHubApiClient gitHubApiClient;
//     private final AuthTokenDao authTokenDao;
// 
//     @Inject
//     public StarRepository(GitHubApiClient gitHubApiClient, AuthTokenDao authTokenDao) {
//         super();
//         this.gitHubApiClient = gitHubApiClient;
//         this.authTokenDao = authTokenDao;
//     }
// 
//     public Single<Boolean> get(String user, String repo) {
//         String key = user + "/" + repo;
//         if (getCache().containsKey(key)) {
//             return Single.just(getCache().get(key));
//         }
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getStar(header, user, repo)
//                             .toCompletable()
//                             .toSingleDefault(true)
//                             .onErrorReturn(throwable -> false);
//                 })
//                 .doOnSuccess(aBoolean -> getCache().put(key, aBoolean));
//     }
// 
//     public Completable put(String user, String repo) {
//         return authTokenDao.get()
//                 .flatMapCompletable(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.putStar(header, user, repo).toCompletable();
//                 })
//                 .doOnCompleted(() -> {
//                     Timber.v("put complete");
//                     getCache().put(user + "/" + repo, true);
//                 });
//     }
// 
//     public Completable delete(String user, String repo) {
//         return authTokenDao.get()
//                 .flatMapCompletable(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.deleteStar(header, user, repo).toCompletable();
//                 })
//                 .doOnCompleted(() -> {
//                     Timber.v("delete complete");
//                     getCache().put(user + "/" + repo, false);
//                 });
//     }
// }


import android.util.Pair;
import java.util.List;
import javax.inject.Inject;
import io.github.kobakei.anago.entity.Repo;
import io.github.kobakei.anago.repository.RepoRepository;
import io.github.kobakei.anago.repository.StarRepository;
import rx.Observable;
import rx.Single;
package io.github.kobakei.anago.usecase;





/**
 * 自分のリポジトリ一覧を取得するユースケース
 * Created by keisuke on 2016/09/18.
 */

public class GetUserReposUseCase {

    private final RepoRepository repoRepository;
    private final StarRepository starRepository;

    @Inject
// Path: app/src/main/java/io/github/kobakei/anago/entity/Repo.java
// public class Repo {
//     public long id;
//     public String name;
//     public String full_name;
//     public String description;
//     public int stargazers_count;
//     public User owner;
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/repository/RepoRepository.java
// @Singleton
// public class RepoRepository extends Repository<String, Repo> {
// 
//     private final GitHubApiClient gitHubApiClient;
//     private final AuthTokenDao authTokenDao;
// 
//     @Inject
//     public RepoRepository(GitHubApiClient gitHubApiClient, AuthTokenDao authTokenDao) {
//         super();
//         this.gitHubApiClient = gitHubApiClient;
//         this.authTokenDao = authTokenDao;
//     }
// 
//     public Single<List<Repo>> getPublicRepos(int page, int perPage) {
//         return gitHubApiClient.getPublicRepos(page, perPage);
//     }
// 
//     public Single<List<Repo>> getUserRepos(int page, int perPage) {
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getUserRepos(header, page, perPage);
//                 })
//                 .doOnSuccess(repos1 -> {
//                     for (Repo repo : repos1) {
//                         getCache().put(repo.full_name, repo);
//                     }
//                 });
//     }
// 
//     public Single<List<Repo>> getStarredRepos(int page, int perPage) {
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getStarredRepos(header, page, perPage);
//                 })
//                 .doOnSuccess(repos1 -> {
//                     for (Repo repo : repos1) {
//                         getCache().put(repo.full_name, repo);
//                     }
//                 });
//     }
// 
//     public Single<Repo> getByFullname(String user, String repo) {
//         String fullname = user + "/" + repo;
//         if (getCache().containsKey(fullname)) {
//             return Single.just(getCache().get(fullname));
//         }
//         return gitHubApiClient.getRepo(user, repo);
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/repository/StarRepository.java
// @Singleton
// public class StarRepository extends Repository<String, Boolean> {
// 
//     private final GitHubApiClient gitHubApiClient;
//     private final AuthTokenDao authTokenDao;
// 
//     @Inject
//     public StarRepository(GitHubApiClient gitHubApiClient, AuthTokenDao authTokenDao) {
//         super();
//         this.gitHubApiClient = gitHubApiClient;
//         this.authTokenDao = authTokenDao;
//     }
// 
//     public Single<Boolean> get(String user, String repo) {
//         String key = user + "/" + repo;
//         if (getCache().containsKey(key)) {
//             return Single.just(getCache().get(key));
//         }
//         return authTokenDao.get()
//                 .flatMap(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.getStar(header, user, repo)
//                             .toCompletable()
//                             .toSingleDefault(true)
//                             .onErrorReturn(throwable -> false);
//                 })
//                 .doOnSuccess(aBoolean -> getCache().put(key, aBoolean));
//     }
// 
//     public Completable put(String user, String repo) {
//         return authTokenDao.get()
//                 .flatMapCompletable(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.putStar(header, user, repo).toCompletable();
//                 })
//                 .doOnCompleted(() -> {
//                     Timber.v("put complete");
//                     getCache().put(user + "/" + repo, true);
//                 });
//     }
// 
//     public Completable delete(String user, String repo) {
//         return authTokenDao.get()
//                 .flatMapCompletable(authToken -> {
//                     String header = "token " + authToken.token;
//                     return gitHubApiClient.deleteStar(header, user, repo).toCompletable();
//                 })
//                 .doOnCompleted(() -> {
//                     Timber.v("delete complete");
//                     getCache().put(user + "/" + repo, false);
//                 });
//     }
// }


// Path: app/src/main/java/io/github/kobakei/anago/usecase/GetUserReposUseCase.java
import android.util.Pair;
import java.util.List;
import javax.inject.Inject;
import io.github.kobakei.anago.entity.Repo;
import io.github.kobakei.anago.repository.RepoRepository;
import io.github.kobakei.anago.repository.StarRepository;
import rx.Observable;
import rx.Single;

package io.github.kobakei.anago.usecase;





/**
 * 自分のリポジトリ一覧を取得するユースケース
 * Created by keisuke on 2016/09/18.
 */

public class GetUserReposUseCase {

    private final RepoRepository repoRepository;
    private final StarRepository starRepository;

    @Inject
    public GetUserReposUseCase(RepoRepository repoRepository, StarRepository starRepository) {