2024-08-19 16:01:58 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
|
import { v4 as uuidv4 } from 'uuid'
|
2024-10-17 12:17:24 +01:00
|
|
|
import { MessageUpdateInput } from '../../../../../core/chat/usecase/message/message-update-by-id-use-case.service';
|
|
|
|
|
import { MessageReactionInput } from '../../../../../core/chat/usecase/message/message-reaction-by-id-use-case.service';
|
2024-08-27 11:00:32 +01:00
|
|
|
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
|
2024-08-27 16:04:29 +01:00
|
|
|
import { filter, map } from 'rxjs/operators';
|
|
|
|
|
import { SocketMessage } from 'src/app/infra/socket/signalR/signalR';
|
2024-08-27 20:29:57 +01:00
|
|
|
import { IMessageSocketRepository } from 'src/app/core/chat/repository/message/message-socket-repository';
|
2024-10-17 12:17:24 +01:00
|
|
|
import { MessageCreateOutPutDataDTO, MessageInputDTO } from '../../../../../core/chat/usecase/message/message-create-use-case.service';
|
|
|
|
|
import { MessageMarkAsReadInput } from '../../../../../core/chat/usecase/message/message-mark-as-read-use-case.service';
|
2024-08-27 23:36:24 +01:00
|
|
|
import { MessageOutPutDataDTO } from 'src/app/core/chat/repository/dto/messageOutputDTO';
|
2024-10-17 12:17:24 +01:00
|
|
|
import { MessageDeleteInputDTO } from '../../../../../core/chat/usecase/message/message-delete-by-id-live-use-case.service';
|
2024-10-29 16:00:19 +01:00
|
|
|
import { BehaviorSubject } from 'rxjs';
|
2024-08-19 16:01:58 +01:00
|
|
|
|
2024-08-20 16:34:47 +01:00
|
|
|
interface sendDeliverAt {
|
|
|
|
|
memberId: number,
|
|
|
|
|
messageId:string,
|
|
|
|
|
roomId: string,
|
|
|
|
|
requestId: string
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-19 16:01:58 +01:00
|
|
|
@Injectable({
|
|
|
|
|
providedIn: 'root'
|
|
|
|
|
})
|
2024-08-27 20:29:57 +01:00
|
|
|
export class MessageSocketRepositoryService implements IMessageSocketRepository {
|
2024-08-19 16:01:58 +01:00
|
|
|
|
2024-09-01 14:27:32 +01:00
|
|
|
private sendDataSubject: BehaviorSubject<{method: string, data: any}> = new BehaviorSubject<{method: string, data: any}>(null);
|
|
|
|
|
|
2024-08-19 16:01:58 +01:00
|
|
|
constructor(
|
|
|
|
|
private socket: SignalRService
|
|
|
|
|
) {}
|
|
|
|
|
|
2024-08-21 10:40:54 +01:00
|
|
|
connect() {
|
|
|
|
|
return this.socket.establishConnection();
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
async join() {
|
|
|
|
|
return await this.socket.join()
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-19 16:01:58 +01:00
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
async sendGroupMessage(data: MessageInputDTO) {
|
2024-08-26 14:47:03 +01:00
|
|
|
|
2024-08-27 09:14:59 +01:00
|
|
|
if(!data.requestId) {
|
2025-09-04 15:40:45 +01:00
|
|
|
//data['requestId'] = InstanceId +'@'+ uuidv4();
|
|
|
|
|
data['requestId'] = uuidv4();
|
2024-08-26 14:47:03 +01:00
|
|
|
}
|
|
|
|
|
|
2024-08-27 20:29:57 +01:00
|
|
|
const result = await this.socket.sendData<MessageCreateOutPutDataDTO>({
|
2024-08-21 20:14:48 +01:00
|
|
|
method: 'sendMessage',
|
|
|
|
|
data: data,
|
|
|
|
|
})
|
2024-08-19 16:01:58 +01:00
|
|
|
|
2024-09-01 14:27:32 +01:00
|
|
|
this.sendDataSubject.next({
|
|
|
|
|
method: 'sendMessage',
|
|
|
|
|
data: data,
|
|
|
|
|
})
|
2024-09-01 12:57:33 +01:00
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
return result;
|
2024-08-19 16:01:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async sendDirectMessage(data: MessageInputDTO) {
|
2024-08-26 14:47:03 +01:00
|
|
|
|
2024-08-27 09:14:59 +01:00
|
|
|
if(!data.requestId) {
|
2025-09-04 15:40:45 +01:00
|
|
|
//data['requestId'] = InstanceId +'@'+ uuidv4();
|
|
|
|
|
data['requestId'] = uuidv4();
|
2024-08-26 14:47:03 +01:00
|
|
|
}
|
2024-08-19 16:01:58 +01:00
|
|
|
const result = await this.socket.sendData<MessageOutPutDataDTO>({
|
|
|
|
|
method: 'SendDirectMessage',
|
|
|
|
|
data: data as any,
|
|
|
|
|
})
|
|
|
|
|
|
2024-09-01 14:27:32 +01:00
|
|
|
this.sendDataSubject.next({
|
|
|
|
|
method: 'SendDirectMessage',
|
|
|
|
|
data: data,
|
|
|
|
|
})
|
2024-08-19 16:01:58 +01:00
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-20 16:34:47 +01:00
|
|
|
async sendDeliverAt(data: sendDeliverAt) {
|
|
|
|
|
const result = await this.socket.sendData<any>({
|
|
|
|
|
method: 'DeliverAt',
|
|
|
|
|
data: data as any,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-27 20:29:57 +01:00
|
|
|
async sendReadAt(data: MessageMarkAsReadInput) {
|
2024-08-20 16:34:47 +01:00
|
|
|
const result = await this.socket.sendData<any>({
|
|
|
|
|
method: 'ReadAt',
|
|
|
|
|
data: data as any,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
async sendDelete(data: MessageDeleteInputDTO) {
|
|
|
|
|
const result = await this.socket.sendData<any>({
|
|
|
|
|
method: 'ReadAt',
|
|
|
|
|
data: data,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-19 16:01:58 +01:00
|
|
|
listenToMessages() {
|
2024-08-27 16:04:29 +01:00
|
|
|
return this.socket.getData().pipe(
|
2024-10-08 13:16:01 +01:00
|
|
|
filter((e) : e is SocketMessage<MessageOutPutDataDTO>=> e?.method == 'ReceiveMessage')
|
2024-08-27 16:04:29 +01:00
|
|
|
)
|
2024-08-19 16:01:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
listenToDeleteMessages() {
|
2024-08-27 16:04:29 +01:00
|
|
|
return this.socket.getData().pipe(
|
|
|
|
|
filter((e) : e is SocketMessage<MessageOutPutDataDTO>=> e?.method == 'DeleteMessage'
|
|
|
|
|
),
|
|
|
|
|
map((e)=> e.data)
|
|
|
|
|
)
|
2024-08-19 16:01:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
listenToUpdateMessages() {
|
2024-08-27 16:04:29 +01:00
|
|
|
return this.socket.getData().pipe(
|
|
|
|
|
filter((e) : e is SocketMessage<MessageOutPutDataDTO>=> e?.method == 'UpdateMessage'
|
|
|
|
|
),
|
|
|
|
|
map((e)=> e.data)
|
|
|
|
|
)
|
2024-08-19 16:01:58 +01:00
|
|
|
}
|
|
|
|
|
|
2024-09-01 14:27:32 +01:00
|
|
|
listenToSendMessage() {
|
|
|
|
|
return this.sendDataSubject.pipe(
|
|
|
|
|
filter((e) : e is SocketMessage<MessageInputDTO>=> {
|
|
|
|
|
console.log(e, e?.method == 'sendMessage' || e?.method == 'SendDirectMessage')
|
|
|
|
|
|
|
|
|
|
return e?.method == 'sendMessage' || e?.method == 'SendDirectMessage'
|
|
|
|
|
}
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-20 16:34:47 +01:00
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
reactToMessageSocket(data: MessageReactionInput) {
|
2025-09-04 15:40:45 +01:00
|
|
|
//data['requestId'] = InstanceId +'@'+ uuidv4();
|
|
|
|
|
data['requestId'] = uuidv4();
|
2024-10-29 16:00:19 +01:00
|
|
|
|
|
|
|
|
return this.socket.sendData({
|
2024-08-19 16:01:58 +01:00
|
|
|
method: 'ReactMessage',
|
|
|
|
|
data
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateMessage(input: MessageUpdateInput) {
|
2025-09-04 15:40:45 +01:00
|
|
|
//data['requestId'] = InstanceId +'@'+ uuidv4();
|
|
|
|
|
input['requestId'] = uuidv4();
|
2024-10-29 16:00:19 +01:00
|
|
|
|
2024-08-19 16:01:58 +01:00
|
|
|
this.socket.sendData({
|
|
|
|
|
method: 'EditMessage',
|
|
|
|
|
data: input,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sendMessageDelete(data: MessageDeleteInputDTO) {
|
|
|
|
|
|
2025-09-04 15:40:45 +01:00
|
|
|
//data['requestId'] = InstanceId +'@'+ uuidv4();
|
|
|
|
|
data['requestId'] = uuidv4();
|
2024-08-19 16:01:58 +01:00
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
const result = this.socket.sendData<any>({
|
|
|
|
|
method: 'DeleteMessage',
|
|
|
|
|
data: data,
|
|
|
|
|
})
|
2024-08-20 16:34:47 +01:00
|
|
|
|
2024-08-21 20:14:48 +01:00
|
|
|
return result;
|
|
|
|
|
}
|
2024-08-19 16:01:58 +01:00
|
|
|
|
|
|
|
|
}
|