mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-19 21:06:06 +00:00
fix bold
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { z } from "zod";
|
||||
import { base64Schema } from "src/app/utils/zod";
|
||||
import { SessionStore } from "src/app/store/session.service";
|
||||
|
||||
|
||||
export enum MessageAttachmentSource {
|
||||
@@ -101,7 +102,7 @@ export class MessageEntity {
|
||||
}
|
||||
|
||||
static haveSeen(info: typeof MessageEntitySchema._type.info) {
|
||||
return info.filter(e => typeof e.readAt != 'string')
|
||||
return info.filter(e => typeof e.readAt != 'string' && e.memberId == SessionStore.user.UserId).length == 1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import Dexie, { PromiseExtended } from "Dexie";
|
||||
import { BoldTable } from "src/app/infra/database/dexie/instance/chat/schema/bold";
|
||||
import { DexieRepository } from "src/app/infra/repository/dexie/dexie-repository.service";
|
||||
|
||||
|
||||
export abstract class IBoldLocalRepository extends DexieRepository<BoldTable, BoldTable> implements IBoldLocalRepository {
|
||||
|
||||
}
|
||||
abstract open(): PromiseExtended<Dexie>
|
||||
}
|
||||
|
||||
@@ -2,10 +2,12 @@ import { MessageTable } from "src/app/infra/database/dexie/instance/chat/schema/
|
||||
import { DexieRepository } from "src/app/infra/repository/dexie/dexie-repository.service";
|
||||
import { MessageEntity } from "../../entity/message";
|
||||
import { Observable as DexieObservable, PromiseExtended } from 'Dexie';
|
||||
import { Observable } from "rxjs";
|
||||
|
||||
export abstract class IMessageLocalRepository extends DexieRepository<MessageTable, MessageEntity> {
|
||||
abstract setAllSenderToFalse(): void
|
||||
abstract getItems(roomId: string): PromiseExtended<MessageEntity[]>
|
||||
abstract getItemsLive(roomId: string): DexieObservable<MessageEntity[]>
|
||||
abstract getItemsLive(roomId: string): DexieObservable<MessageEntity[]>
|
||||
abstract getOfflineMessages(): Promise<MessageEntity[]>
|
||||
}
|
||||
abstract onCreateObservable(): Observable<MessageTable>
|
||||
}
|
||||
|
||||
@@ -15,7 +15,8 @@ export const RoomTableSchema = z.object({
|
||||
createdAt: z.any(),
|
||||
expirationDate: z.any().nullable(),
|
||||
roomType: z.nativeEnum(RoomType),
|
||||
messages: MessageEntitySchema.array().optional()
|
||||
messages: MessageEntitySchema.array().optional(),
|
||||
bold: z.number().optional()
|
||||
})
|
||||
|
||||
export type RoomTable = z.infer<typeof RoomTableSchema>
|
||||
|
||||
@@ -85,7 +85,9 @@ export class DexieRepository<T, R> implements IDexieRepository<T, R> {
|
||||
const ids = await this.table.bulkAdd(documents as any);
|
||||
return ok(ids);
|
||||
} catch (error) {
|
||||
|
||||
Logger.error(`dexie.js failed to insert many into ${this.table.name}`, {
|
||||
data: document
|
||||
});
|
||||
return err(new Error('Failed to insert multiple documents: ' + error.message));
|
||||
}
|
||||
}
|
||||
@@ -155,6 +157,9 @@ export class DexieRepository<T, R> implements IDexieRepository<T, R> {
|
||||
const documents: any = await this.table.where(filter).toArray();
|
||||
return ok(documents);
|
||||
} catch (error) {
|
||||
Logger.error(`dexie.js failed to find into ${this.table.name}`, {
|
||||
data: filter,
|
||||
});
|
||||
return err(new Error('Failed to find documents: ' + error.message));
|
||||
}
|
||||
}
|
||||
@@ -164,7 +169,10 @@ export class DexieRepository<T, R> implements IDexieRepository<T, R> {
|
||||
const document = await this.table.where(filter).first();
|
||||
return ok(document);
|
||||
} catch (error) {
|
||||
console.log(filter)
|
||||
Logger.error(`dexie.js failed to findOne into ${this.table.name}`, {
|
||||
data: filter,
|
||||
error
|
||||
});
|
||||
return err(new Error('Failed to find document: ' + error.message));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<div style="white-space: pre-line;">
|
||||
{{ message.message }}
|
||||
{{ message.message }} {{ message.sentAt }}
|
||||
</div>
|
||||
|
||||
<div *ngFor="let attachment of message.attachments; let i = index">
|
||||
|
||||
Reference in New Issue
Block a user