fix duplicate message

This commit is contained in:
Peter Maquiran
2024-08-01 16:38:08 +01:00
parent 82e4acbe87
commit 8774cef0b2
3 changed files with 52 additions and 18 deletions
@@ -22,24 +22,27 @@ export class MessageAsyncService {
this.messageLiveSignalRDataSourceService.getMessage().pipe(
filter((message) => {
if(!message?.requestId?.startsWith(InstanceId) == false) {
// console.log('exclude my message---')
}
return !message?.requestId?.startsWith(InstanceId)
})
).subscribe(async (message) => {
if(message?.id) {
console.log('message async ', message)
// console.log('message async ', message)
const id = message.id + ''
delete message.id;
const incomingMessage = {
...message,
messageId: id,
sending: false,
roomId:message.chatRoomId
}
this.incomingMessage(incomingMessage)
}
@@ -59,15 +62,15 @@ export class MessageAsyncService {
const id = message.id + ''
delete message.id;
const incomingMessage = {
...message,
messageId: id,
sending: false,
roomId:message.chatRoomId
}
this.incomingMessage(incomingMessage)
this.incomingUpdateMessage(incomingMessage)
}
@@ -79,7 +82,7 @@ export class MessageAsyncService {
if(message.id) {
this.incomingDeleted(message)
}
})
}
@@ -106,4 +109,18 @@ export class MessageAsyncService {
console.log(result.error)
}
}
async incomingUpdateMessage(data: MessageOutPutDataDTO & { messageId }) {
const result = await this.messageLocalDataSourceService.messageExist({messageId: data.messageId})
if(result.isOk()) {
console.log('message exist')
return this.messageLocalDataSourceService.update(result.value)
} else {
console.log('message else')
}
}
}
@@ -53,7 +53,7 @@ export const messageDataSource = new Dexie('chat-message') as Dexie & {
};
messageDataSource.version(1).stores({
message: '++id, roomId, message, messageType, canEdit, oneShot, requireUnlock, messageId'
message: '++id, roomId, message, messageType, canEdit, oneShot, requireUnlock, messageId, info'
});
@Injectable({
@@ -136,13 +136,16 @@ export class MessageLocalDataSourceService {
async messageExist({messageId}) {
try {
console.log({messageId});
const existingMessage = await messageDataSource.message
.where('messageId')
.equals(messageId)
.first();
if (existingMessage) {
return ok(true)
return ok(existingMessage)
} else {
return err(false)
}
@@ -165,6 +168,18 @@ export class MessageLocalDataSourceService {
}
async updateByMessageId(data: TableMessage ) {
try {
const result = await messageDataSource.message.update(data.id, data)
return ok(result)
} catch (e) {
return err(false)
}
}
async findOrUpdate(data: TableMessage) {
const findResult = await this.findMessageById(data.messageId)
@@ -65,16 +65,18 @@ export class MessageRepositoryService {
delete sendMessageResult.value.sender
}
// let clone: TableMessage = {
// ...sendMessageResult.value,
// messageId: sendMessageResult.value.id,
// id : localActionResult.value
// }
let clone: TableMessage = {
...sendMessageResult.value,
messageId: sendMessageResult.value.id,
id : localActionResult.value
}
// console.log({clone})
console.log('update message')
//return this.messageLocalDataSourceService.update({...clone, sending: false})
return this.messageLocalDataSourceService.update({...clone, sending: false})
return ok(true)
} else {
console.log('no message to upload')
}
} else {
@@ -84,7 +86,7 @@ export class MessageRepositoryService {
sendMessageDelete(data: MessageDeleteInputDTO) {
data['requestId'] = InstanceId +'@'+ uuidv4();
return this.messageLiveSignalRDataSourceService.sendMessageDelete(data)
@@ -94,7 +96,7 @@ export class MessageRepositoryService {
const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId)
if(result.isOk()) {
if(result.value) {
return await this.messageLiveSignalRDataSourceService.sendReadAt({roomId, memberId: SessionStore.user.UserId, chatMessageId: result.value.messageId})
}
return ok(true)
@@ -130,7 +132,7 @@ export class MessageRepositoryService {
sendTyping(roomId) {
return this.messageLiveSignalRDataSourceService.sendTyping({
roomId,
roomId,
UserName:SessionStore.user.FullName,
userId: SessionStore.user.UserId
})