Fix retreival method of GroupChatRepository to receive account as argument

This commit is contained in:
Paul Schaub 2019-12-02 02:29:50 +01:00
parent 8d7dd5687e
commit c5918efc89
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
2 changed files with 31 additions and 4 deletions

View File

@ -3,6 +3,7 @@ package org.mercury_im.messenger.data.repository;
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
import org.mercury_im.messenger.data.model.GroupChatModel;
import org.mercury_im.messenger.data.util.Optional;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.GroupChat;
import org.mercury_im.messenger.entity.chat.IGroupChat;
import org.mercury_im.messenger.entity.message.Message;
@ -68,9 +69,23 @@ public class XmppGroupChatRepository
}
@Override
public Observable<Optional<GroupChat>> observeGroupChatByRoomAddress(String roomAddress) {
public Single<GroupChat> getOrCreateGroupChat(Account account, String roomAddress) {
return getGroupChatByRoomAddress(account, roomAddress)
.switchIfEmpty(insertGroupChat(new IGroupChat(){
{
setAccount(account);
setRoomAddress(roomAddress);
}
}))
.subscribeOn(subscriberScheduler())
.observeOn(observerScheduler());
}
@Override
public Observable<Optional<GroupChat>> observeGroupChatByRoomAddress(long accountId, String roomAddress) {
return data().select(GroupChatModel.class)
.where(GroupChatModel.ADDRESS.eq(roomAddress))
.and(GroupChatModel.ACCOUNT_ID.eq(accountId))
.get().observableResult()
.map(result -> new Optional<>(
groupChatMapping.modelToEntity(result.firstOrNull(), new IGroupChat())))
@ -79,9 +94,10 @@ public class XmppGroupChatRepository
}
@Override
public Maybe<GroupChat> getGroupChatByRoomAddress(String roomAddress) {
public Maybe<GroupChat> getGroupChatByRoomAddress(long accountId, String roomAddress) {
return data().select(GroupChatModel.class)
.where(GroupChatModel.ADDRESS.eq(roomAddress))
.and(GroupChatModel.ACCOUNT_ID.eq(accountId))
.get().maybe()
.map(model -> groupChatMapping.modelToEntity(model, new IGroupChat()))
.subscribeOn(subscriberScheduler())

View File

@ -1,5 +1,6 @@
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.entity.message.Message;
import org.mercury_im.messenger.data.util.Optional;
@ -19,9 +20,19 @@ public interface GroupChatRepository {
Maybe<GroupChat> getGroupChat(long chatId);
Observable<Optional<GroupChat>> observeGroupChatByRoomAddress(String roomAddress);
Single<GroupChat> getOrCreateGroupChat(Account account, String roomAddress);
Maybe<GroupChat> getGroupChatByRoomAddress(String roomAddress);
default Observable<Optional<GroupChat>> observeGroupChatByRoomAddress(Account account, String roomAddress) {
return observeGroupChatByRoomAddress(account.getId(), roomAddress);
}
Observable<Optional<GroupChat>> observeGroupChatByRoomAddress(long accountId, String roomAddress);
default Maybe<GroupChat> getGroupChatByRoomAddress(Account account, String roomAddress) {
return getGroupChatByRoomAddress(account.getId(), roomAddress);
}
Maybe<GroupChat> getGroupChatByRoomAddress(long accountId, String roomAddress);
Observable<List<GroupChat>> observeAllGroupChats();