receive message live

This commit is contained in:
Peter Maquiran
2024-07-16 14:15:58 +01:00
parent 4a1db73402
commit 0312df88e8
12 changed files with 157 additions and 28 deletions
@@ -1,10 +1,12 @@
import { Injectable } from '@angular/core';
import { MessageLiveDataSourceService } from '../../data-source/message/message-live-data-source.service';
import { MessageLocalDataSourceService } from '../../data-source/message/message-local-data-source.service';
import { IncomingMessageSchema, MessageLocalDataSourceService } from '../../data-source/message/message-local-data-source.service';
import { MessageRemoteDataSourceService } from '../../data-source/message/message-remote-data-source.service';
import { SignalRService } from '../../../infra/socket/signal-r.service';
import { filter } from 'rxjs/operators';
import { InstanceId } from '../../repository/message-respository.service';
import { SocketStreamReturn } from 'src/app/services/decorators/socket-validate-schema.decorator';
import { SafeValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
@Injectable({
providedIn: 'root'
@@ -26,25 +28,33 @@ export class MessageAsyncService {
).subscribe(async (message: any) => {
console.log('message async ', message)
const id = message.id
const id = message.id + ''
delete message.id;
const result = await this.messageLocalDataSourceService.createMessage({
const incomingMessage = {
...message,
messageId: id,
sending: false,
...message
})
if(result.isOk()) {
console.log(result.value)
console.log("nice send receive")
} else {
console.log(result.error)
roomId:message.chatRoomId
}
this.incomingMessage(incomingMessage)
})
}
@SafeValidateSchema(IncomingMessageSchema, 'socket/incomingMessage')
async incomingMessage(IncomingMessageSchema: any) {
const result = await this.messageLocalDataSourceService.sendMessage(IncomingMessageSchema)
if(result.isOk()) {
} else {
console.log(result.error)
}
}
}
@@ -11,7 +11,24 @@ const tableSchema = z.object({
id: z.any().optional(),
messageId: z.string().optional(),
roomId: z.string().uuid(),
senderId: z.number(),
message: z.string(),
messageType: z.number(),
canEdit: z.boolean(),
oneShot: z.boolean(),
sentAt: z.string().optional(),
requireUnlock: z.boolean(),
sender: z.object({
wxUserId: z.number(),
wxFullName: z.string(),
wxeMail: z.string(),
userPhoto: z.string(),
}),
sending: z.boolean().optional()
})
export const IncomingMessageSchema = z.object({
messageId: z.string().optional(),
roomId: z.string().uuid(),
message: z.string(),
messageType: z.number(),
canEdit: z.boolean(),
@@ -36,7 +53,7 @@ export const messageDataSource = new Dexie('chat-message') as Dexie & {
};
messageDataSource.version(1).stores({
message: '++id, roomId, senderId, message, messageType, canEdit, oneShot, requireUnlock, messageId'
message: '++id, roomId, message, messageType, canEdit, oneShot, requireUnlock, messageId'
});
@Injectable({
@@ -6,6 +6,7 @@ import { MessageLocalDataSourceService, TableMessage } from '../data-source/mess
import { SessionStore } from 'src/app/store/session.service';
import { SignalRService } from '../../infra/socket/signal-r.service';
import { v4 as uuidv4 } from 'uuid'
import { filter } from 'rxjs/operators';
export const InstanceId = uuidv4();