package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.chat.GroupChat; import org.mercury_im.messenger.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 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(); Single updateGroupChat(GroupChat chat); Single upsertGroupChat(GroupChat chat); Completable deleteGroupChat(GroupChat chat); }