mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
filter
This commit is contained in:
@@ -65,4 +65,8 @@ export class RoomEntity extends BaseEntity<RoomEntity>(RoomEntitySchema) implem
|
|||||||
this.roomName = userChatName.user.wxFullName
|
this.roomName = userChatName.user.wxFullName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hasLastMessage() {
|
||||||
|
return this.messages.length >= 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ export class RoomLastMessageService {
|
|||||||
private MessageSocketRepositoryService: IMessageSocketRepository,
|
private MessageSocketRepositoryService: IMessageSocketRepository,
|
||||||
private roomLocalRepository: IRoomLocalRepository
|
private roomLocalRepository: IRoomLocalRepository
|
||||||
) {
|
) {
|
||||||
this.listenToIncomingMessage()
|
// this.listenToIncomingMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
listenToIncomingMessage() {
|
listenToIncomingMessage() {
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import { filter, map } from 'rxjs/operators';
|
|||||||
import { InstanceId } from '../../chat-service.service';
|
import { InstanceId } from '../../chat-service.service';
|
||||||
import { MessageEntity } from 'src/app/core/chat/entity/message';
|
import { MessageEntity } from 'src/app/core/chat/entity/message';
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
|
import { HttpAdapter } from 'src/app/infra/http/adapter';
|
||||||
|
import { IMessageGetAllByRoomIdOutPut } from 'src/app/core/chat/usecase/message/message-get-all-by-room-Id';
|
||||||
|
import { RoomEntity } from 'src/app/core/chat/entity/group';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@@ -13,15 +16,17 @@ export class RoomSetLastMessageService {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private roomLocalRepository: IRoomLocalRepository,
|
private roomLocalRepository: IRoomLocalRepository,
|
||||||
private messageSocketRepository: IMessageSocketRepository
|
private messageSocketRepository: IMessageSocketRepository,
|
||||||
|
private http: HttpAdapter,
|
||||||
) {
|
) {
|
||||||
this.listenToIncomingMessage()
|
this.listenToIncomingMessage()
|
||||||
this.listenToOnSendDataToSocket()
|
this.listenToOnSendDataToSocket()
|
||||||
|
this.loadHistory()
|
||||||
}
|
}
|
||||||
|
|
||||||
listenToIncomingMessage() {
|
private listenToIncomingMessage() {
|
||||||
return this.messageSocketRepository.listenToMessages().pipe(
|
return this.messageSocketRepository.listenToMessages().pipe(
|
||||||
filter((message) => !message?.requestId?.startsWith(InstanceId)),
|
filter((message) => !message?.requestId?.startsWith(InstanceId)), // get all message not send by me
|
||||||
map(message => Object.assign(new MessageEntity(), message))
|
map(message => Object.assign(new MessageEntity(), message))
|
||||||
).subscribe(async (message) => {
|
).subscribe(async (message) => {
|
||||||
this.roomLocalRepository.update(message.roomId, {
|
this.roomLocalRepository.update(message.roomId, {
|
||||||
@@ -32,7 +37,7 @@ export class RoomSetLastMessageService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
listenToOnSendDataToSocket() {
|
private listenToOnSendDataToSocket() {
|
||||||
this.messageSocketRepository.listenToSendMessage().subscribe(async (e) => {
|
this.messageSocketRepository.listenToSendMessage().subscribe(async (e) => {
|
||||||
|
|
||||||
e.data['sender'] = {
|
e.data['sender'] = {
|
||||||
@@ -52,4 +57,50 @@ export class RoomSetLastMessageService {
|
|||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private loadHistory() {
|
||||||
|
const regex = new RegExp("Room\\/([0-9a-fA-F]{8})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{12})\\/Messages");
|
||||||
|
|
||||||
|
return this.http.listen().pipe(
|
||||||
|
filter((response: any)=> {
|
||||||
|
return response?.isOk() && regex.test(response.value.url)
|
||||||
|
}),
|
||||||
|
map((response: any) => response.value.data as IMessageGetAllByRoomIdOutPut)
|
||||||
|
).subscribe(async (data)=> {
|
||||||
|
const loadHistoryFirstMessage = data.data[0]
|
||||||
|
if(loadHistoryFirstMessage) {
|
||||||
|
|
||||||
|
const roomId = loadHistoryFirstMessage.roomId
|
||||||
|
|
||||||
|
const room = await this.roomLocalRepository.findOne({id: roomId})
|
||||||
|
|
||||||
|
if(room.isOk()) {
|
||||||
|
const roomEntity = new RoomEntity(room.value)
|
||||||
|
if(!roomEntity.hasLastMessage()) {
|
||||||
|
await this.roomLocalRepository.update(loadHistoryFirstMessage.roomId, {
|
||||||
|
messages: [loadHistoryFirstMessage]
|
||||||
|
})
|
||||||
|
} else if (roomEntity.hasLastMessage()) {
|
||||||
|
const localLastMessageDate = new Date(room.value.messages[0].sentAt).getTime()
|
||||||
|
const loadHistoryLastMessageDate = new Date(loadHistoryFirstMessage.sentAt).getTime()
|
||||||
|
|
||||||
|
if(loadHistoryLastMessageDate>localLastMessageDate) {
|
||||||
|
console.log('update by load history')
|
||||||
|
await this.roomLocalRepository.update(loadHistoryFirstMessage.roomId, {
|
||||||
|
messages: [loadHistoryFirstMessage]
|
||||||
|
})
|
||||||
|
} else if(loadHistoryLastMessageDate == localLastMessageDate) {
|
||||||
|
// console.log('same', loadHistoryFirstMessage, roomEntity)
|
||||||
|
} else {
|
||||||
|
console.log('bug!', loadHistoryFirstMessage, roomEntity)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user