Files
doneit-web/src/app/module/chat/data/repository/message/message-live-signalr-data-source.service.ts
T

149 lines
3.7 KiB
TypeScript
Raw Normal View History

2024-08-19 16:01:58 +01:00
import { Injectable } from '@angular/core';
import { v4 as uuidv4 } from 'uuid'
import { InstanceId } from '../../../domain/chat-service.service';
2024-08-27 09:14:59 +01:00
import { MessageUpdateInput } from '../../../domain/use-case/message/message-update-by-id-use-case.service';
import { MessageReactionInput } from '../../../domain/use-case/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';
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';
import { MessageCreateOutPutDataDTO } from '../../../domain/use-case/message/message-create-use-case.service';
import { MessageInputDTO } from 'src/app/core/chat/repository/dto/messageInputDtO'
import { MessageMarkAsReadInput } from '../../../domain/use-case/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';
import { MessageDeleteInputDTO } from '../../../domain/use-case/message/message-delete-by-id-live-use-case.service';
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
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) {
data.requestId = InstanceId +'@'+ 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-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) {
data.requestId = InstanceId +'@'+ 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,
})
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() {
return this.socket.getData().pipe(
filter((e) : e is SocketMessage<MessageOutPutDataDTO>=> e?.method == 'ReceiveMessage'
),
map((e)=> e.data)
)
2024-08-19 16:01:58 +01:00
}
listenToDeleteMessages() {
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() {
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-08-20 16:34:47 +01:00
2024-08-21 20:14:48 +01:00
reactToMessageSocket(data: MessageReactionInput) {
2024-08-19 16:01:58 +01:00
this.socket.sendData({
method: 'ReactMessage',
data
})
}
updateMessage(input: MessageUpdateInput) {
this.socket.sendData({
method: 'EditMessage',
data: input,
})
}
sendMessageDelete(data: MessageDeleteInputDTO) {
data['requestId'] = InstanceId +'@'+ uuidv4();
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
}