package org.mercury_im.messenger.core.data.repository; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.core.util.Optional; import java.util.List; import java.util.UUID; import io.reactivex.Completable; import io.reactivex.Maybe; import io.reactivex.Observable; import io.reactivex.Single; public interface AccountRepository { Single insertAccount(Account account); default Observable> observeAccount(Account account) { return observeAccount(account.getId()); } Observable> observeAccount(UUID accountId); default Maybe getAccount(Account account) { return getAccount(account.getId()); } Maybe getAccount(UUID accountId); Observable> observeAccountByAddress(String address); Maybe getAccountByAddress(String address); Observable> observeAllAccounts(); Observable observeAccounts(); Single updateAccount(Account account); Single upsertAccount(Account account); default Completable deleteAccount(Account account) { return deleteAccount(account.getId()); } Completable deleteAccount(UUID accountId); default Completable updateRosterVersion(Account account, String rosterVersion) { return updateRosterVersion(account.getId(), rosterVersion); } Completable updateRosterVersion(UUID accountId, String rosterVersion); }