Fix message mapping
This commit is contained in:
parent
a0b496be65
commit
366d9b9df8
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue