package org.mercury_im.messenger.core.data.repository; import org.mercury_im.messenger.core.util.Optional; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.contact.Peer; 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 PeerRepository { Single insertPeer(Peer Peer); default Observable> observePeer(Peer peer) { return observePeer(peer.getId()); } Observable> observePeer(UUID PeerId); Maybe getPeer(UUID PeerId); default Observable> observePeerByAddress(Account account, String address) { return observePeerByAddress(account.getId(), address); } Observable> observePeerByAddress(UUID accountId, String address); default Maybe getPeerByAddress(Account account, String address) { return getPeerByAddress(account.getId(), address); } Maybe getPeerByAddress(UUID accountId, String address); Single getOrCreatePeer(Account account, String address); Single getOrCreatePeer(UUID accountId, String address); Observable> observeAllPeers(); default Observable> observeAllContactsOfAccount(Account account) { return observeAllContactsOfAccount(account.getId()); } Observable> observeAllContactsOfAccount(UUID accountId); Single updatePeer(Peer Peer); Single upsertPeer(Peer Peer); Completable deletePeer(Peer Peer); Completable deletePeer(UUID accountId, String address); default Completable deleteAllPeers(Account account) { return deleteAllPeers(account.getId()); } Completable deleteAllPeers(UUID accountId); }