send direct message

This commit is contained in:
Peter Maquiran
2024-08-20 16:34:47 +01:00
parent 4fb24f7875
commit 59fc19879f
41 changed files with 912 additions and 308 deletions
@@ -1,6 +1,7 @@
import { MessageTable } from "src/app/module/chat/infra/database/dexie/schema/message";
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from "../../../dto/room/roomListOutputDTO";
export function messageListDetermineChanges(serverList: any[], localList: any[]) {
export function messageListDetermineChanges(serverList: MessageTable[], localList: MessageTable[]) {
localList = localList.filter(e => e.id)
// Convert lists to dictionaries for easier comparison
@@ -34,7 +34,11 @@ export const MessageOutPutDataDTOSchema = z.object({
reaction: z.string(),
sender: z.object({}),
}).array(),
info: z.array(z.object({})),
info: z.array(z.object({
memberId: z.number(),
readAt: z.string().nullable(),
deliverAt: z.string().nullable()
})),
attachments: z.array(z.object({
fileType: z.nativeEnum(MessageAttachmentFileType),
source: z.nativeEnum(MessageAttachmentSource),
@@ -8,38 +8,41 @@ import { chatDatabase } from '../../infra/database/dexie/service';
import { ok } from 'neverthrow';
import { err, Result } from 'neverthrow';
import { MemberListUPdateStatusInputDTO } from '../../domain/use-case/socket/member-list-update-status-use-case.service';
import { MemberTable } from '../../infra/database/dexie/schema/members';
import { MemberTable, MemberTableSchema } from '../../infra/database/dexie/schema/members';
import { from } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class MemberListLocalRepository extends DexieRepository<RoomTable> {
export class MemberListLocalRepository extends DexieRepository<MemberTable> {
constructor() {
super(chatDatabase.room, RoomTableSchema)
super(chatDatabase.members, MemberTableSchema)
}
// messageDataSource.message.hook('creating', (primKey, obj, trans) => {
// // const newMessage = await trans.table('message').get(primKey);
// this.messageSubject.next(obj);
// // return newMessage
// })
async directMember({roomId, currentUserId}) {
try {
let a = await chatDatabase.members.where('roomId')
.equals(roomId)
.and(message => message.wxUserId !== currentUserId)
.first()
return ok(a)
} catch (e) {
return err(e)
}
}
async addMember(data: MemberTable) {
try {
data.$roomIdUserId = data.roomId + data.wxUserId
const result = await chatDatabase.members.add(data)
return ok(result)
} catch (e) {
return err(false)
}
data.$roomIdUserId = data.roomId + data.wxUserId
return this.insert(data)
}
async updateMemberRole(data: MemberTable) {
try {
const result = await chatDatabase.members.where({
wxUserId:data.wxUserId,
wxUserId: data.wxUserId,
roomId: data.roomId,
}).modify(data);
@@ -100,19 +103,11 @@ export class MemberListLocalRepository extends DexieRepository<RoomTable> {
return liveQuery(() => chatDatabase.members.get($roomIdUserId)) as any;
}
getItemsLive(): Observable<RoomListOutPutDTO[]> {
return liveQuery(() => chatDatabase.room.toArray()) as any;
}
getRoomByIdLive(id: any): Observable<RoomListItemOutPutDTO | undefined> {
return liveQuery(() => chatDatabase.room.get(id)) as any;
}
async getRoomMemberById(roomId: any) {
return await chatDatabase.members.where({roomId}).toArray()
}
getRoomMemberByIdLive(roomId: any) {
return liveQuery(() => chatDatabase.members.where({roomId}).toArray())
return from (liveQuery(() => chatDatabase.members.where({roomId}).toArray()))
}
getRoomMemberNoneAdminByIdLive(roomId: any) {
@@ -19,6 +19,22 @@ interface msgObj {
requestId: string;
}
interface sendDeliverAt {
memberId: number,
messageId:string,
roomId: string,
requestId: string
}
export interface sendReadAt {
memberId: number,
messageId:string,
roomId: string,
requestId: string
}
@Injectable({
providedIn: 'root'
})
@@ -48,6 +64,24 @@ export class MessageSocketRepositoryService {
return result;
}
async sendDeliverAt(data: sendDeliverAt) {
const result = await this.socket.sendData<any>({
method: 'DeliverAt',
data: data as any,
})
return result;
}
async sendReadAt(data: sendReadAt) {
const result = await this.socket.sendData<any>({
method: 'ReadAt',
data: data as any,
})
return result;
}
listenToMessages() {
return this.socket.getMessage()
}
@@ -62,7 +96,7 @@ export class MessageSocketRepositoryService {
return this.socket.getMessageUpdate()
}
reactToMessageSocket(data) {
this.socket.sendData({
method: 'ReactMessage',
@@ -94,6 +128,6 @@ export class MessageSocketRepositoryService {
}
}
@@ -7,6 +7,7 @@ import { ValidateSchema } from 'src/app/services/decorators/validate-schema.deco
import { chatDatabase } from '../../infra/database/dexie/service';
import { RoomTable, RoomTableSchema } from '../../infra/database/dexie/schema/room';
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
import { from } from 'rxjs';
@Injectable({
providedIn: 'root'
@@ -81,7 +82,7 @@ export class RoomLocalRepository extends DexieRepository<RoomTable> {
getItemsLive(){
return liveQuery(() => chatDatabase.room.toArray());
return from (liveQuery(() => chatDatabase.room.toArray()));
}
getRoomByIdLive(id: any) {