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

154 lines
3.2 KiB
TypeScript
Raw Normal View History

2024-08-19 16:01:58 +01:00
import { Injectable } from '@angular/core';
import { err, ok } from 'neverthrow';
import { SignalRService } from '../../../infra/socket/signal-r.service';
import { SessionStore } from 'src/app/store/session.service';
import { MessageDeleteInputDTO } from '../../dto/message/messageDeleteInputDTO';
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';
2024-08-19 16:01:58 +01:00
import { MessageOutPutDataDTO } from '../../dto/message/messageOutputDTO';
import { MessageInputDTO } from '../../dto/message/messageInputDtO';
2024-08-27 09:14:59 +01:00
import { MessageReactionInput } from '../../../domain/use-case/message/message-reaction-by-id-use-case.service';
2024-08-19 16:01:58 +01:00
interface msgObj {
roomId: string;
senderId: string;
message:string;
messageType:1;
canEdit:Boolean;
oneShot:Boolean;
requestId: string;
}
2024-08-20 16:34:47 +01:00
interface sendDeliverAt {
memberId: number,
messageId:string,
roomId: string,
requestId: string
}
export interface sendReadAt {
memberId: number,
messageId:string,
roomId: string,
requestId: string
}
2024-08-19 16:01:58 +01:00
@Injectable({
providedIn: 'root'
})
export class MessageSocketRepositoryService {
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-21 20:14:48 +01:00
const result = await this.socket.sendData<MessageOutPutDataDTO>({
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;
}
async sendReadAt(data: sendReadAt) {
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.getMessage()
}
listenToDeleteMessages() {
return this.socket.getMessageDelete()
}
listenToUpdateMessages() {
return this.socket.getMessageUpdate()
}
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
}