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.chat.GroupChat; 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 GroupChatRepository { Single insertGroupChat(GroupChat chat); Observable> observeGroupChat(UUID chatId); Maybe getGroupChat(UUID chatId); Single getOrCreateGroupChat(Account account, String roomAddress); default Observable> observeGroupChatByRoomAddress(Account account, String roomAddress) { return observeGroupChatByRoomAddress(account.getId(), roomAddress); } Observable> observeGroupChatByRoomAddress(UUID accountId, String roomAddress); default Maybe getGroupChatByRoomAddress(Account account, String roomAddress) { return getGroupChatByRoomAddress(account.getId(), roomAddress); } Maybe getGroupChatByRoomAddress(UUID accountId, String roomAddress); Observable> observeAllGroupChats(); default Observable> observeAllGroupChatsOfAccount(Account account) { return observeAllGroupChatsOfAccount(account.getId()); } Observable> observeAllGroupChatsOfAccount(UUID accountId); Single updateGroupChat(GroupChat chat); Single upsertGroupChat(GroupChat chat); default Completable deleteGroupChat(GroupChat chat) { return deleteGroupChat(chat.getId()); } Completable deleteGroupChat(UUID chatId); }