57 lines
1.6 KiB
Java
57 lines
1.6 KiB
Java
package org.mercury_im.messenger.core.repository;
|
|
|
|
import org.mercury_im.messenger.core.entity.Account;
|
|
import org.mercury_im.messenger.core.entity.Address;
|
|
import org.mercury_im.messenger.core.entity.chat.GroupChat;
|
|
import org.mercury_im.messenger.core.entity.message.Message;
|
|
import org.mercury_im.messenger.core.entity.message.MessageMetadata;
|
|
import org.mercury_im.messenger.core.entity.message.MessagePayload;
|
|
import org.mercury_im.messenger.core.util.Optional;
|
|
|
|
import java.util.List;
|
|
|
|
import io.reactivex.Completable;
|
|
import io.reactivex.Maybe;
|
|
import io.reactivex.Observable;
|
|
import io.reactivex.Single;
|
|
|
|
public interface GroupChatRepository<
|
|
GC extends GroupChat<AC, AD, RA>,
|
|
AC extends Account<AD, ?>,
|
|
AD extends Address.UserAddress,
|
|
RA extends Address.RoomAddress,
|
|
M extends Message<AD, MM, MP>,
|
|
MM extends MessageMetadata,
|
|
MP extends MessagePayload> {
|
|
|
|
Single<GC> insertGroupChat(GC chat);
|
|
|
|
Observable<Optional<GC>> observeGroupChat(long chatId);
|
|
|
|
Maybe<GC> getGroupChat(long chatId);
|
|
|
|
Observable<Optional<GC>> observeGroupChatByRoomAddress(RA roomAddress);
|
|
|
|
Maybe<GC> getGroupChatByRoomAddress(RA roomAddress);
|
|
|
|
Observable<List<GC>> observeAllGroupChats();
|
|
|
|
Single<GC> updateGroupChat(GC chat);
|
|
|
|
Single<GC> upsertGroupChat(GC chat);
|
|
|
|
Completable deleteGroupChat(GC chat);
|
|
|
|
// Messages
|
|
|
|
Single<M> insertMessage(GC chat, M message);
|
|
|
|
Observable<List<M>> observeMessages(GC chat);
|
|
|
|
Single<M> updateMessage(M message);
|
|
|
|
Single<M> upsertMessage(GC chat, M message);
|
|
|
|
Completable deleteMessage(M message);
|
|
}
|