package com.badoo.chateau.example.data.repos.session; import android.support.annotation.NonNull; import com.badoo.chateau.example.Broadcaster; import com.badoo.chateau.data.models.BaseUser; import com.badoo.chateau.example.data.util.ParseHelper; import com.badoo.chateau.example.data.util.ParseUtils; import com.badoo.chateau.example.data.util.ParseUtils.UsersTable; import java.util.HashMap; import java.util.Map; import rx.Observable; import rx.schedulers.Schedulers; public class ParseSessionDataSource implements SessionDataSource { @NonNull private Broadcaster mBroadcaster; private ParseHelper mParseHelper; public ParseSessionDataSource(@NonNull Broadcaster broadcaster, @NonNull ParseHelper parseHelper) { mBroadcaster = broadcaster; mParseHelper = parseHelper; } @NonNull @Override public Observable<BaseUser> signIn(@NonNull SessionQuery.SignIn query) { return mParseHelper.signIn(query.getUserName(), query.getPassword()) .map(ParseUtils::fromParseUser) .map(user -> ((BaseUser) user)) .subscribeOn(Schedulers.io()) .doOnCompleted(() -> mBroadcaster.userSignedIn()); } @Override public Observable<Void> signOut() { return mParseHelper.signOut() .subscribeOn(Schedulers.io()) .doOnCompleted(() -> mBroadcaster.userSignedOut()); } @NonNull @Override public Observable<BaseUser> register(@NonNull SessionQuery.Register query) { final Map<String, Object> additionalParams = new HashMap<>(); additionalParams.put(UsersTable.Fields.DISPLAY_NAME, query.getDisplayName()); return mParseHelper.signUp(query.getUserName(), query.getPassword(), additionalParams) .map(ParseUtils::fromParseUser) .map(user -> ((BaseUser) user)) .subscribeOn(Schedulers.io()) .doOnCompleted(() -> mBroadcaster.userSignedIn()); } }