send and receive message

This commit is contained in:
Peter Maquiran
2024-07-11 10:28:21 +01:00
parent 386ca67315
commit b0325a5558
50 changed files with 720 additions and 372 deletions
@@ -0,0 +1,103 @@
import { Injectable } from '@angular/core';
import { MessageRemoteDataSourceService } from '../data-source/message/message-remote-data-source.service';
import { MessageLiveDataSourceService } from '../data-source/message/message-live-data-source.service';
import { MessageInputDTO } from '../dto/message/messageInputDtO';
import { MessageLocalDataSourceService, TableMessage } from '../data-source/message/message-local-data-source.service';
import { SessionStore } from 'src/app/store/session.service';
import { SignalRService } from '../../infra/socket/signal-r.service';
import { v4 as uuidv4 } from 'uuid'
export const InstanceId = uuidv4();
@Injectable({
providedIn: 'root'
})
export class MessageRepositoryService {
constructor(
private messageRemoteDataSourceService: MessageRemoteDataSourceService,
private messageLiveDataSourceService: MessageLiveDataSourceService,
private messageLiveSignalRDataSourceService: SignalRService,
private messageLocalDataSourceService: MessageLocalDataSourceService
) {
this.messageLiveDataSourceService.socket.messages$.subscribe(({payload, requestId, type}) => {
})
}
async sendMessage(data: MessageInputDTO) {
(data as TableMessage).sender = {
userPhoto: '',
wxeMail: SessionStore.user.Email,
wxFullName: SessionStore.user.FullName,
wxUserId: SessionStore.user.UserId
}
data['requestId'] = InstanceId +'@'+ uuidv4();
const localActionResult = await this.messageLocalDataSourceService.sendMessage(data)
this.messageLiveDataSourceService.sendMessage({
type: 'sendMessage',
payload: data
})
if(localActionResult.isOk()) {
const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage(data)
//const sendMessageResult = await this.messageRemoteDataSourceService.sendMessage(data)
if(sendMessageResult.isOk()) {
if(sendMessageResult.value.sender == undefined || sendMessageResult.value.sender == null) {
console.log({sendMessageResult})
delete sendMessageResult.value.sender
}
let clone: TableMessage = {
...sendMessageResult.value,
messageId: sendMessageResult.value.id,
id : localActionResult.value
}
return this.messageLocalDataSourceService.update({...clone, sending: false})
}
} else {
return this.messageLocalDataSourceService.update({sending: false})
}
}
async listAllMessagesByRoomId(id: string) {
const result = await this.messageRemoteDataSourceService.getMessagesFromRoom(id)
if(result.isOk()) {
for(const message of result.value.data) {
let clone: TableMessage = message
clone.messageId = message.id
clone.roomId = id
delete clone.id
await this.messageLocalDataSourceService.findOrUpdate(clone)
}
}
return result
}
getItemsLive (roomId: string) {
return this.messageLocalDataSourceService.getItemsLive(roomId)
}
subscribeToNewMessages(roomId: any) {
return this.messageLocalDataSourceService.subscribeToNewMessage(roomId)
}
}