Fix message mapping

This commit is contained in:
Paul Schaub 2019-12-08 22:49:42 +01:00
parent a0b496be65
commit 366d9b9df8
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
7 changed files with 81 additions and 21 deletions

View File

@ -3,6 +3,7 @@ package org.mercury_im.messenger.data.di;
import org.mercury_im.messenger.data.repository.dao.AccountDao; import org.mercury_im.messenger.data.repository.dao.AccountDao;
import org.mercury_im.messenger.data.repository.dao.DirectChatDao; import org.mercury_im.messenger.data.repository.dao.DirectChatDao;
import org.mercury_im.messenger.data.repository.dao.GroupChatDao; import org.mercury_im.messenger.data.repository.dao.GroupChatDao;
import org.mercury_im.messenger.data.repository.dao.MessageDao;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -22,13 +23,19 @@ public class DaoModule {
@Provides @Provides
@Singleton @Singleton
public static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) { static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) {
return new DirectChatDao(data); return new DirectChatDao(data);
} }
@Provides @Provides
@Singleton @Singleton
public static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) { static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) {
return new GroupChatDao(data); return new GroupChatDao(data);
} }
@Provides
@Singleton
static MessageDao provideMessageDao(ReactiveEntityStore<Persistable> data) {
return new MessageDao(data);
}
} }

View File

@ -81,11 +81,9 @@ public class RepositoryModule {
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler, @Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
MessageMapping messageMapping, MessageMapping messageMapping,
DirectChatMapping directChatMapping, DirectChatMapping directChatMapping,
GroupChatMapping groupChatMapping, GroupChatMapping groupChatMapping) {
DirectChatRepository directChatRepository, return new XmppMessageRepository(data, ioScheduler, uiScheduler,
GroupChatRepository groupChatRepository) { messageMapping, directChatMapping, groupChatMapping);
return new XmppMessageRepository(data, ioScheduler, uiScheduler, messageMapping,
directChatMapping, groupChatMapping, directChatRepository, groupChatRepository);
} }
@Provides @Provides

View File

@ -6,6 +6,9 @@ import org.mercury_im.messenger.entity.message.IMessage;
import org.mercury_im.messenger.entity.message.Message; import org.mercury_im.messenger.entity.message.Message;
import org.mercury_im.messenger.entity.message.PayloadContainer; import org.mercury_im.messenger.entity.message.PayloadContainer;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
public class MessageMapping extends AbstractMapping<Message, MessageModel> { public class MessageMapping extends AbstractMapping<Message, MessageModel> {
@ -45,6 +48,16 @@ public class MessageMapping extends AbstractMapping<Message, MessageModel> {
@Override @Override
public Message mapToEntity(MessageModel model, Message entity) { public Message mapToEntity(MessageModel model, Message entity) {
return null; entity.setId(model.getId());
entity.setSender(model.getSender());
entity.setRecipient(model.getRecipient());
entity.setTimestamp(model.getTimestamp());
List<PayloadContainer> payloadContainers = new ArrayList<>(entity.getMessagePayloads().size());
for (MessagePayloadContainerModel containerModel : model.getPayloads()) {
payloadContainers.add(messagePayloadContainerMapping.toEntity(containerModel));
}
entity.setMessagePayloads(payloadContainers);
return entity;
} }
} }

View File

@ -30,12 +30,15 @@ public abstract class AbstractMessageModel implements Persistable {
@OneToMany @OneToMany
Set<MessagePayloadContainerModel> payloads; Set<MessagePayloadContainerModel> payloads;
@Column(nullable = false) @Column
String legacyId; String legacyId;
@Column
String originId; String originId;
@Column
String stanzaId; String stanzaId;
@Column
String stanzaIdBy; String stanzaIdBy;
} }

View File

@ -39,8 +39,6 @@ public class XmppMessageRepository
private final MessageMapping messageMapping; private final MessageMapping messageMapping;
private final DirectChatMapping directChatMapping; private final DirectChatMapping directChatMapping;
private final GroupChatMapping groupChatMapping; private final GroupChatMapping groupChatMapping;
private final DirectChatRepository directChatRepository;
private final GroupChatRepository groupChatRepository;
private final DirectChatDao directChatDao; private final DirectChatDao directChatDao;
private final GroupChatDao groupChatDao; private final GroupChatDao groupChatDao;
@ -50,19 +48,15 @@ public class XmppMessageRepository
@Inject @Inject
public XmppMessageRepository(ReactiveEntityStore<Persistable> data, public XmppMessageRepository(ReactiveEntityStore<Persistable> data,
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler, @Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler, @Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
MessageMapping messageMapping, MessageMapping messageMapping,
DirectChatMapping directChatMapping, DirectChatMapping directChatMapping,
GroupChatMapping groupChatMapping, GroupChatMapping groupChatMapping) {
DirectChatRepository directChatRepository,
GroupChatRepository groupChatRepository) {
super(data, subscriberScheduler, observerScheduler); super(data, subscriberScheduler, observerScheduler);
this.messageMapping = messageMapping; this.messageMapping = messageMapping;
this.directChatMapping = directChatMapping; this.directChatMapping = directChatMapping;
this.groupChatMapping = groupChatMapping; this.groupChatMapping = groupChatMapping;
this.directChatRepository = directChatRepository;
this.groupChatRepository = groupChatRepository;
this.directChatDao = new DirectChatDao(data); this.directChatDao = new DirectChatDao(data);
this.groupChatDao = new GroupChatDao(data); this.groupChatDao = new GroupChatDao(data);
this.dao = new MessageDao(data); this.dao = new MessageDao(data);
@ -180,6 +174,15 @@ public class XmppMessageRepository
@Override @Override
public Single<Message> upsertMessage(DirectChat chat, Message message) { public Single<Message> upsertMessage(DirectChat chat, Message message) {
return null; return null;
/*
return data().select(DirectMessagesRelation.class)
.where(DirectMessagesRelation.CHAT_ID.eq(chat.getId()))
.and(DirectMessagesRelation.MESSAGE_ID.eq(message.getId()))
.get().maybe()
.switchIfEmpty(Single.just(message)
.map(messageMapping::toModel)
.flatMap(messageModel -> )
*/
} }
@Override @Override
@ -199,7 +202,9 @@ public class XmppMessageRepository
@Override @Override
public Completable deleteMessage(Message message) { public Completable deleteMessage(Message message) {
return null; return data().delete(MessageModel.class)
.where(MessageModel.ID.eq(message.getId()))
.get().single().ignoreElement();
} }
private DirectMessagesRelation toRelation(DirectChatModel chat, MessageModel message) { private DirectMessagesRelation toRelation(DirectChatModel chat, MessageModel message) {

View File

@ -6,6 +6,7 @@ import org.mercury_im.messenger.data.model.GroupChatModel;
import org.mercury_im.messenger.data.model.GroupMessagesRelation; import org.mercury_im.messenger.data.model.GroupMessagesRelation;
import org.mercury_im.messenger.data.model.MessageModel; import org.mercury_im.messenger.data.model.MessageModel;
import io.reactivex.Single;
import io.requery.Persistable; import io.requery.Persistable;
import io.requery.reactivex.ReactiveEntityStore; import io.requery.reactivex.ReactiveEntityStore;
import io.requery.reactivex.ReactiveResult; import io.requery.reactivex.ReactiveResult;
@ -21,6 +22,10 @@ public class MessageDao extends RequeryDao {
this.groupChatDao = new GroupChatDao(data); this.groupChatDao = new GroupChatDao(data);
} }
public Single<MessageModel> insert(MessageModel message) {
return data().insert(message);
}
public ReactiveResult<MessageModel> get(long messageId) { public ReactiveResult<MessageModel> get(long messageId) {
return data().select(MessageModel.class) return data().select(MessageModel.class)
.where(MessageModel.ID.eq(messageId)) .where(MessageModel.ID.eq(messageId))

View File

@ -10,6 +10,17 @@ import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.chat.IDirectChat; import org.mercury_im.messenger.entity.chat.IDirectChat;
import org.mercury_im.messenger.entity.contact.IPeer; import org.mercury_im.messenger.entity.contact.IPeer;
import org.mercury_im.messenger.entity.contact.Peer; import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.message.IMessage;
import org.mercury_im.messenger.entity.message.IPayloadContainer;
import org.mercury_im.messenger.entity.message.Message;
import org.mercury_im.messenger.entity.message.PayloadContainer;
import org.mercury_im.messenger.entity.message.content.TextPayload;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
@ -32,6 +43,9 @@ public class AccountRepositoryTest {
@Inject @Inject
XmppPeerRepository contactRepository; XmppPeerRepository contactRepository;
@Inject
XmppMessageRepository messageRepository;
@Inject @Inject
public AccountRepositoryTest() { public AccountRepositoryTest() {
RepositoryTestComponent testComponent = DaggerRepositoryTestComponent.builder() RepositoryTestComponent testComponent = DaggerRepositoryTestComponent.builder()
@ -62,6 +76,21 @@ public class AccountRepositoryTest {
.blockingGet(); .blockingGet();
assertEquals(1, chatModel.getId()); assertEquals(1, chatModel.getId());
Message message = new IMessage();
message.setSender("test@test.test");
message.setRecipient("peer@peer.peer");
message.setTimestamp(new Date());
PayloadContainer container = new IPayloadContainer();
TextPayload body = new TextPayload();
body.setBody("Hallo");
container.setMessageContents(Collections.singletonList(body));
List<PayloadContainer> payloadContainers = new ArrayList<>();
payloadContainers.add(container);
message.setMessagePayloads(payloadContainers);
Message _message = messageRepository.insertMessage(directChat, message)
.blockingGet();
dataStore.close(); dataStore.close();
} }
} }