create direct message

This commit is contained in:
Peter Maquiran
2024-08-19 16:01:58 +01:00
parent 29d0a9b55e
commit ae50d9b3bd
46 changed files with 500 additions and 297 deletions
@@ -3,7 +3,8 @@ import { MessageAttachmentFileType, MessageAttachmentSource } from "./messageOut
import { base64Schema } from "src/app/utils/zod";
export const MessageInputDTOSchema = z.object({
roomId: z.string().uuid(),
roomId: z.string().uuid().optional(),
receiverId: z.number().optional(),
senderId: z.number(),
message: z.string().nullable().optional(),
messageType: z.number(),
@@ -27,7 +27,7 @@ export const MessageOutPutDataDTOSchema = z.object({
canEdit: z.boolean(),
oneShot: z.boolean(),
requireUnlock: z.boolean(),
requestId: z.string().optional(),
requestId: z.string().optional().nullable(),
reactions: z.object({
id: z.string(),
reactedAt: z.string(),
@@ -1,51 +0,0 @@
import { Injectable } from '@angular/core';
import { err, ok } from 'neverthrow';
import { SignalRService } from '../../infra/socket/signal-r.service';
interface msgObj {
roomId: string;
senderId: string;
message:string;
messageType:1;
canEdit:Boolean;
oneShot:Boolean;
requestId: string;
}
@Injectable({
providedIn: 'root'
})
export class MessageLiveDataSourceService {
constructor(
private messageLiveSignalRDataSourceService: SignalRService
) {}
async sendMessage(data: msgObj) {
try {
const result = await this.messageLiveSignalRDataSourceService.sendMessage(data)
return ok(result)
} catch (e) {
return err(e)
}
}
listenToMessages() {
return this.messageLiveSignalRDataSourceService.getMessage()
}
listenToDeleteMessages() {
return this.messageLiveSignalRDataSourceService.getMessageDelete()
}
listenToUpdateMessages() {
return this.messageLiveSignalRDataSourceService.getMessageUpdate()
}
}
@@ -0,0 +1,99 @@
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';
import { MessageUpdateInput } from '../../../domain/use-case/message-update-by-id-use-case.service';
import { MessageOutPutDataDTO } from '../../dto/message/messageOutputDTO';
import { MessageInputDTO } from '../../dto/message/messageInputDtO';
interface msgObj {
roomId: string;
senderId: string;
message:string;
messageType:1;
canEdit:Boolean;
oneShot:Boolean;
requestId: string;
}
@Injectable({
providedIn: 'root'
})
export class MessageSocketRepositoryService {
constructor(
private socket: SignalRService
) {}
async sendMessage(data: msgObj) {
try {
const result = await this.socket.sendMessage(data)
return ok(result)
} catch (e) {
return err(e)
}
}
async sendDirectMessage(data: MessageInputDTO) {
const result = await this.socket.sendData<MessageOutPutDataDTO>({
method: 'SendDirectMessage',
data: data as any,
})
return result;
}
listenToMessages() {
return this.socket.getMessage()
}
listenToDeleteMessages() {
return this.socket.getMessageDelete()
}
listenToUpdateMessages() {
return this.socket.getMessageUpdate()
}
reactToMessageSocket(data) {
this.socket.sendData({
method: 'ReactMessage',
data
})
}
updateMessage(input: MessageUpdateInput) {
this.socket.sendData({
method: 'EditMessage',
data: input,
})
}
sendTyping(roomId) {
return this.socket.sendTyping({
roomId,
UserName:SessionStore.user.FullName,
userId: SessionStore.user.UserId
})
}
sendMessageDelete(data: MessageDeleteInputDTO) {
data['requestId'] = InstanceId +'@'+ uuidv4();
return this.socket.sendMessageDelete(data)
}
}
@@ -3,10 +3,10 @@ import { liveQuery } from 'Dexie';
import { err, ok, Result } from 'neverthrow';
import { Observable, Subject } from 'rxjs';
import { filter } from 'rxjs/operators';
import { MessageEntity } from '../../domain/entity/message';
import { MessageEntity } from '../../../domain/entity/message';
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
import { MessageTable, MessageTableSchema } from 'src/app/module/chat/infra/database/dexie/schema/message';
import { chatDatabase } from '../../infra/database/dexie/service';
import { chatDatabase } from '../../../infra/database/dexie/service';
import { Observable as DexieObservable, PromiseExtended } from 'Dexie';
@Injectable({
@@ -1,15 +1,15 @@
import { Injectable } from '@angular/core';
import { HttpService } from 'src/app/services/http.service';
import { MessageInputDTO, MessageInputDTOSchema } from '../dto/message/messageInputDtO';
import { MessageInputDTO, MessageInputDTOSchema } from '../../dto/message/messageInputDtO';
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator';
import { MessageOutPutDataDTOSchema, MessageOutPutDTO, MessageOutPutDTOSchema } from '../dto/message/messageOutputDTO';
import { MessageOutPutDataDTOSchema, MessageOutPutDTO, MessageOutPutDTOSchema } from '../../dto/message/messageOutputDTO';
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
import { SignalRService } from '../../infra/socket/signal-r.service';
import { MessageUpdateInput } from '../../domain/use-case/message-update-by-id-use-case.service';
import { SignalRService } from '../../../infra/socket/signal-r.service';
import { MessageUpdateInput } from '../../../domain/use-case/message-update-by-id-use-case.service';
import { SessionStore } from 'src/app/store/session.service';
import { MessageDeleteInputDTO } from '../dto/message/messageDeleteInputDTO';
import { InstanceId } from '../../domain/chat-service.service';
import { MessageDeleteInputDTO } from '../../dto/message/messageDeleteInputDTO';
import { InstanceId } from '../../../domain/chat-service.service';
import { v4 as uuidv4 } from 'uuid'
@Injectable({
@@ -46,35 +46,5 @@ export class MessageRemoteDataSourceService {
return await this.httpService.get(`${this.baseUrl}/attachment/${id}`);
}
reactToMessageSocket(data) {
this.socket.sendData({
method: 'ReactMessage',
data
})
}
updateMessage(input: MessageUpdateInput) {
this.socket.sendData({
method: 'EditMessage',
data: input,
})
}
sendTyping(roomId) {
return this.socket.sendTyping({
roomId,
UserName:SessionStore.user.FullName,
userId: SessionStore.user.UserId
})
}
sendMessageDelete(data: MessageDeleteInputDTO) {
data['requestId'] = InstanceId +'@'+ uuidv4();
return this.socket.sendMessageDelete(data)
}
}