This commit is contained in:
Peter Maquiran
2024-09-02 15:27:07 +01:00
parent 1b9b4600ab
commit 167df65628
12 changed files with 91 additions and 36 deletions
@@ -14,7 +14,11 @@ export class BoldLocalRepository extends DexieRepository<BoldTable, BoldTable>
super(chatDatabase.bold, BoldTableSchema)
}
open() {
return chatDatabase.open()
}
listen() {
return from(liveQuery(() => chatDatabase.bold.toArray()))
}
}
}
@@ -20,21 +20,20 @@ export class MessageLocalDataSourceService extends DexieRepository<MessageTable,
super(chatDatabase.message, MessageTableSchema)
this.setAllSenderToFalse();
this.onCreatingHook()
}
private onCreatingHook() {
chatDatabase.message.hook('creating', (primaryKey, obj, transaction) => {
console.log('A new friend is being added:', obj);
this.creatingSubject.next(obj)
console.log('creating', obj)
});
}
// onCreateObservable() {
// return this.creatingSubject.asObservable().pipe(
// filter(e => e?.sender?.wxFullName)
// )
// }
onCreateObservable() {
return this.creatingSubject.asObservable()
}
async setAllSenderToFalse() {
try {
@@ -41,6 +41,7 @@ import { MessageMarkAsReadInput } from "src/app/module/chat/domain/use-case/mess
import { BoldRemoveByRoomIdInput, BoldRemoveByRoomIdService } from 'src/app/module/chat/domain/use-case/bold/bold-remove-by-room-id.service';
import { MemberListHttpSyncUseCase } from 'src/app/module/chat/domain/use-case/member/member-list-http-sync-use-case.ts.service'
import { RoomBoldSyncUseCaseService } from 'src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service'
import { RoomSetLastMessageService } from 'src/app/module/chat/domain/use-case/room/room-set-last-message.service'
export const InstanceId = uuidv4();
@Injectable({
@@ -82,7 +83,8 @@ export class ChatServiceService {
private MessageSocketRepositoryService: MessageSocketRepositoryService,
private BoldRemoveByRoomIdService: BoldRemoveByRoomIdService,
private MemberListHttpSyncUseCase: MemberListHttpSyncUseCase,
private RoomBoldSyncUseCaseService: RoomBoldSyncUseCaseService
private RoomBoldSyncUseCaseService: RoomBoldSyncUseCaseService,
private RoomSetLastMessageService: RoomSetLastMessageService
) {
this.MessageSocketRepositoryService.listenToDeleteMessages()
.pipe()
@@ -15,7 +15,7 @@ export type BoldRemoveByRoomIdInput = z.infer<typeof BoldRemoveByRoomIdInputSche
export class BoldRemoveByRoomIdService {
constructor(
private boldLocalRepository: IBoldLocalRepository
private boldLocalRepository: IBoldLocalRepository,
) { }
@XTracerAsync({name:'BoldRemoveByRoomIdService', module:'chat', bugPrint: true})
@@ -24,10 +24,11 @@ export class BoldRemoveByRoomIdService {
const validation = zodSafeValidation<any>(BoldRemoveByRoomIdInputSchema, input)
if(validation.isOk()) {
console.log('remove buld============================')
return await this.boldLocalRepository.delete(input.roomId)
} else {
tracing.hasError("invalid parameter")
}
}
}
@@ -3,9 +3,11 @@ import { filter, map } from 'rxjs/operators';
import { IMessageSocketRepository } from 'src/app/core/chat/repository/message/message-socket-repository';
import { MessageEntity } from 'src/app/core/chat/entity/message';
import { IBoldLocalRepository } from 'src/app/core/chat/repository/bold/bold-local-repository';
import { IMessageLocalRepository } from 'src/app/core/chat/repository/message/message-local-repository';
import { InstanceId } from '../../chat-service.service';
import { IMessageGetAllByRoomIdOutPut } from 'src/app/core/chat/usecase/message/message-get-all-by-room-Id';
import { HttpAdapter } from 'src/app/infra/http/adapter';
import { SessionStore } from 'src/app/store/session.service';
@Injectable({
@@ -17,9 +19,11 @@ export class RoomBoldSyncUseCaseService {
private MessageSocketRepositoryService: IMessageSocketRepository,
private boldLocalRepository: IBoldLocalRepository,
private http: HttpAdapter,
private messageLocalRepository: IMessageLocalRepository
) {
this.listenToIncomingMessage();
this.loadHistory()
// this.loadHistory()
this.onInsertToDB()
}
private listenToIncomingMessage() {
@@ -39,22 +43,48 @@ export class RoomBoldSyncUseCaseService {
});
}
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");
// 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)
// 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)=> {
// if(data.data.length >= 1) {
// for(const message of data.data) {
// const haveSeen = MessageEntity.haveSeen(message.info)
// }
// }
// })
// }
private onInsertToDB() {
this.messageLocalRepository.onCreateObservable().pipe(
filter(e => {
console.log('onInsertToDB', e)
return e?.origin == 'history'
}),
map((response: any) => response.value.data as IMessageGetAllByRoomIdOutPut)
).subscribe(async (data)=> {
filter(e => e.sender.wxUserId != SessionStore.user.UserId)
).subscribe(async (newMessage)=> {
const haveSeen = MessageEntity.haveSeen(newMessage.info)
if(!haveSeen) {
setTimeout(async ()=> {
if(data.data.length >= 1) {
for(const message of data.data) {
const haveSeen = MessageEntity.haveSeen(message.info)
}
await this.boldLocalRepository.open()
const result = await this.boldLocalRepository.findOne({roomId: newMessage.roomId})
if(result.isOk() && !result.value) {
const result = await this.boldLocalRepository.insert({roomId: newMessage.roomId, bold: 1})
} else if(result.isOk() && result.value.bold == 0) {
const result = await this.boldLocalRepository.update(newMessage.roomId, {bold: 1})
}
}, 2000)
}
})
}
}
@@ -29,10 +29,16 @@ export class RoomSetLastMessageService {
filter((message) => !message?.requestId?.startsWith(InstanceId)), // get all message not send by me
map(message => Object.assign(new MessageEntity(), message))
).subscribe(async (message) => {
this.roomLocalRepository.update(message.roomId, {
const result = await this.roomLocalRepository.update(message.roomId, {
messages: [message]
})
if(result.isErr()) {
console.log('failed to update last message')
} else {
console.log('set last message')
}
});
}
@@ -63,7 +69,7 @@ export class RoomSetLastMessageService {
return this.http.listen().pipe(
filter((response: any)=> {
return response?.isOk() && regex.test(response.value.url)
return response?.isOk() && regex.test(response.value.url) && response.value.url.endsWith('/Messages')
}),
map((response: any) => response.value.data as IMessageGetAllByRoomIdOutPut)
).subscribe(async (data)=> {
@@ -92,7 +98,7 @@ export class RoomSetLastMessageService {
} else if(loadHistoryLastMessageDate == localLastMessageDate) {
// console.log('same', loadHistoryFirstMessage, roomEntity)
} else {
console.log('bug!', loadHistoryFirstMessage, roomEntity)
// console.log('bug!', loadHistoryFirstMessage, roomEntity)
}
}