add interface

This commit is contained in:
Peter Maquiran
2024-08-27 20:29:57 +01:00
parent 6c0a15fb7c
commit ee30dd2d5b
43 changed files with 470 additions and 221 deletions
@@ -3,7 +3,14 @@ import { filter, map } from 'rxjs/operators';
import { InstanceId } from '../../chat-service.service';
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service'
import { MessageEntity } from '../../../../../core/chat/entity/message';
import { UseCase } from 'src/app/utils/use-case-interface';
import { z } from 'zod';
export const ListenMessageByRoomIdNewInputDTOSchema = z.object({
roomId: z.string(),
});
export type ListenMessageByRoomIdNewInputDTO = z.infer<typeof ListenMessageByRoomIdNewInputDTOSchema>
@Injectable({
providedIn: 'root'
@@ -14,10 +21,10 @@ export class ListenMessageByRoomIdNewUseCase {
private MessageSocketRepositoryService: MessageSocketRepositoryService
) { }
execute({roomId}: {roomId: string}) {
execute(data: ListenMessageByRoomIdNewInputDTO) {
return this.MessageSocketRepositoryService.listenToMessages().pipe(
filter((message) => !message?.requestId?.startsWith(InstanceId) && message?.roomId == roomId),
filter((message) => !message?.requestId?.startsWith(InstanceId) && message?.roomId == data.roomId),
map(message => Object.assign(new MessageEntity(), message))
)
@@ -1,6 +1,14 @@
import { Injectable } from '@angular/core';
import { filter } from 'rxjs/operators';
import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service';
import { z } from 'zod';
export const ListenMessageUpdateByRoomIdInputDTOSchema = z.object({
roomId: z.string(),
});
export type ListenMessageUpdateByRoomIdInputDTO = z.infer<typeof ListenMessageUpdateByRoomIdInputDTOSchema>
@Injectable({
providedIn: 'root'
@@ -11,9 +19,9 @@ export class ListenMessageUpdateByRoomIdUseCase {
private messageLiveSignalRDataSourceService: MessageSocketRepositoryService,
) { }
execute({roomId}) {
execute(input: ListenMessageUpdateByRoomIdInputDTO) {
return this.messageLiveSignalRDataSourceService.listenToUpdateMessages().pipe(
filter((message) => roomId == message?.roomId )
filter((message) => input.roomId == message?.roomId )
)
}
}
@@ -2,6 +2,14 @@ import { Injectable } from '@angular/core';
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service'
import { InstanceId } from '../../chat-service.service';
import { filter, map } from 'rxjs/operators';
import { z } from 'zod';
export const ListenSendMessageInputDTOSchema = z.object({
roomId: z.string(),
});
export type ListenSendMessageInputDTO = z.infer<typeof ListenSendMessageInputDTOSchema>
@Injectable({
providedIn: 'root'
@@ -2,6 +2,14 @@ import { Injectable } from '@angular/core';
import { filter } from 'rxjs/operators';
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service'
import { z } from 'zod';
export const ListenMessageDeleteByRoomIdInputDTOSchema = z.object({
roomId: z.string(),
});
export type ListenMessageDeleteByRoomIdInputDTO = z.infer<typeof ListenMessageDeleteByRoomIdInputDTOSchema>
@Injectable({
providedIn: 'root'
})
@@ -11,7 +19,7 @@ export class ListenMessageDeleteByRoomIdService {
private MessageSocketRepositoryService: MessageSocketRepositoryService,
) { }
execute({roomId}) {
execute({roomId}: ListenMessageDeleteByRoomIdInputDTO) {
return this.MessageSocketRepositoryService.listenToDeleteMessages().pipe(
filter((message) => {
return roomId == message?.roomId
@@ -17,19 +17,54 @@ import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelem
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service'
import { SessionStore } from 'src/app/store/session.service';
import { MessageTable } from 'src/app/infra/database/dexie/instance/chat/schema/message';
import { MessageAttachmentFileType } from 'src/app/core/chat/repository/dto/messageOutputDTO';
const MessageInputUseCaseSchema = z.object({
memberId: z.number(),
roomId: z.string(),
message: z.string()
})
export enum MessageEnum {
Direct = 1,
group = 2
}
export type MessageInputUseCase = z.infer< typeof MessageInputUseCaseSchema>
export const MessageCreatePutDataDTOSchema = z.object({
id: z.string(),
roomId: z.string(),
sender: z.object({
wxUserId: z.number(),
wxFullName: z.string(),
wxeMail: z.string(),
userPhoto: z.string().optional()
}),
message: z.string().nullable().optional(),
messageType: z.number(),
sentAt: z.string(),
canEdit: z.boolean(),
oneShot: z.boolean(),
requireUnlock: z.boolean(),
requestId: z.string().optional().nullable(),
reactions: z.object({
id: z.string(),
reactedAt: z.string(),
reaction: z.string(),
sender: z.object({}),
}).array(),
info: z.array(z.object({
memberId: z.number(),
readAt: z.string().nullable(),
deliverAt: z.string().nullable()
})),
attachments: z.array(z.object({
fileType: z.nativeEnum(MessageAttachmentFileType),
source: z.nativeEnum(MessageAttachmentSource),
file: z.string().optional(),
fileName: z.string().optional(),
applicationId: z.number().optional(),
docId: z.string().optional(),
id: z.string().optional()
}))
});
export type MessageCreateOutPutDataDTO = z.infer<typeof MessageCreatePutDataDTOSchema>
@Injectable({
providedIn: 'root'
@@ -1,7 +1,5 @@
import { Injectable } from '@angular/core';
import { z } from 'zod';
import { SafeValidateSchema, ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service';
import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service';
import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer';
export const MessageDeleteInputDTOSchema = z.object({
@@ -1,6 +1,17 @@
import { Injectable } from '@angular/core';
import { MessageSocketRepositoryService, sendReadAt } from '../../../data/repository/message/message-live-signalr-data-source.service';
import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service';
import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer';
import { z } from 'zod';
export const MessageMarkAsReadInputSchema = z.object({
memberId: z.number(),
messageId: z.string(),
roomId: z.string(),
requestId: z.string()
})
export type MessageMarkAsReadInput = z.infer<typeof MessageMarkAsReadInputSchema>
@Injectable({
providedIn: 'root'
})
@@ -12,7 +23,7 @@ export class MessageMarkAsReadUseCaseService {
@XTracerAsync({name:'MessageMarkAsReadUseCaseService', module:'chat', bugPrint: true})
async execute(sendReadAt: sendReadAt, tracing?: TracingType) {
return this.MessageSocketRepositoryService.sendReadAt(sendReadAt)
async execute(sendReadAt: MessageMarkAsReadInput, tracing?: TracingType) {
return this.MessageSocketRepositoryService.sendReadAt(sendReadAt as any)
}
}
@@ -1,32 +0,0 @@
import { Injectable } from '@angular/core';
import { err, ok } from 'neverthrow';
import { SessionStore } from 'src/app/store/session.service';
import { MessageLocalDataSourceService } from '../../../data/repository/message/message-local-data-source.service';
import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service';
import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service';
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
@Injectable({
providedIn: 'root'
})
export class MessageReadAtByIdUseCaseService {
constructor(
private MessageSocketRepositoryService: MessageSocketRepositoryService,
private messageLiveSignalRDataSourceService: SignalRService,
private messageLocalDataSourceService: MessageLocalDataSourceService,
) { }
async execute({roomId}) {
// const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId)
// if(result.isOk()) {
// if(result.value) {
// return await this.MessageSocketRepositoryService.sendReadAt({roomId, memberId: SessionStore.user.UserId, messageId: result.value.id, requestId: ''})
// }
// return ok(true)
// }
// return err(false)
}
}
@@ -1,31 +0,0 @@
import { Injectable } from '@angular/core';
import { MessageEntity } from '../../../../../core/chat/entity/message';
import { z } from 'zod';
const MessageInputUseCaseSchema = z.object({
memberId: z.number(),
roomId: z.string(),
message: z.string()
})
export type MessageInputUseCase = z.infer< typeof MessageInputUseCaseSchema>
@Injectable({
providedIn: 'root'
})
export class MessageCreateUseCaseService {
constructor() { }
async execute(input: MessageEntity) {
// const result = await this.MessageRepositoryService.(input)
// if(result.isOk()) {
// }
// return result
}
}
@@ -1,9 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class MessageToAsyncUIService {
constructor() { }
}