Files
doneit-web/src/app/module/chat/domain/chat-service.service.ts
T

145 lines
5.8 KiB
TypeScript
Raw Normal View History

2024-07-31 17:23:44 +01:00
import { Injectable } from '@angular/core';
import { MessageDeleteLiveUseCaseService, MessageDeleteInputDTO } from 'src/app/module/chat/domain/use-case/message-delete-live-use-case.service'
import { SessionStore } from 'src/app/store/session.service';
2024-08-02 11:34:57 +01:00
import { MessageReactionInput, MessageReactionUseCaseService } from 'src/app/module/chat/domain/use-case/message-reaction-use-case.service';
2024-08-02 12:40:34 +01:00
import { MessageUpdateInput, MessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/message-update-use-case.service';
2024-08-06 11:24:00 +01:00
import { MemberAdminUseCaseService, MemberSetAdminDTO } from 'src/app/module/chat/domain/use-case/member-admin-use-case.service';
import { MessageCreateUseCaseService } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
2024-08-02 16:20:26 +01:00
import { SignalRService } from '../infra/socket/signal-r.service';
import { SocketMessageDeleteUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service';
import { SocketMessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service';
import { SocketMessageCreateUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service';
2024-08-13 10:52:35 +01:00
import { ListenMessageByRoomIdNewUseCase } from 'src/app/module/chat/domain/use-case/listen-message-by-roomId.service';
2024-08-06 11:24:00 +01:00
import { MemberListUpdateStatusUseCaseService } from 'src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service';
2024-08-13 10:52:35 +01:00
import { ListenMessageDeleteByRoomIdService } from './use-case/listene-message-delete-by-roomId.service';
import { ListenMessageUpdateByRoomIdUseCase } from './use-case/listen-message-update-by-roomId.service';
import { ListenSendMessageUseCase } from './use-case/listen-send-message.service'
2024-08-02 16:20:26 +01:00
import { filter } from 'rxjs/operators';
import { v4 as uuidv4 } from 'uuid'
import { MessageEntity } from './entity/message';
2024-08-13 17:05:46 +01:00
import { MessageAttachmentByMessageIdInput, MessageAttachmentByMessageIdUseCase } from './use-case/message-attachment-by-message-id.service';
export const InstanceId = uuidv4();
2024-07-31 17:23:44 +01:00
@Injectable({
providedIn: 'root'
})
export class ChatServiceService {
constructor(
2024-08-02 11:34:57 +01:00
private MessageDeleteLiveUseCaseService: MessageDeleteLiveUseCaseService,
2024-08-02 12:40:34 +01:00
private MessageReactionUseCaseService: MessageReactionUseCaseService,
2024-08-02 16:20:26 +01:00
private MessageUpdateUseCaseService: MessageUpdateUseCaseService,
private SocketMessageDeleteUseCaseService: SocketMessageDeleteUseCaseService,
private messageLiveSignalRDataSourceService: SignalRService,
private SocketMessageUpdateUseCaseService: SocketMessageUpdateUseCaseService,
2024-08-06 11:24:00 +01:00
private SocketMessageCreateUseCaseService: SocketMessageCreateUseCaseService,
private MemberListUpdateStatusUseCaseService: MemberListUpdateStatusUseCaseService,
private MemberAdminUseCaseService: MemberAdminUseCaseService,
2024-08-13 10:52:35 +01:00
private MessageCreateUseCaseService: MessageCreateUseCaseService,
private ListenMessageByRoomIdNewUseCase: ListenMessageByRoomIdNewUseCase,
private ListenMessageDeleteService: ListenMessageDeleteByRoomIdService,
private ListenMessageUpdateByRoomIdUseCase: ListenMessageUpdateByRoomIdUseCase,
2024-08-13 17:05:46 +01:00
private ListenSendMessageUseCase: ListenSendMessageUseCase,
private MessageAttachmentByMessageIdService: MessageAttachmentByMessageIdUseCase
2024-08-02 16:20:26 +01:00
) {
this.messageLiveSignalRDataSourceService.getMessageDelete()
.pipe()
.subscribe(async (message) => {
if(message?.id) {
this.SocketMessageDeleteUseCaseService.execute(message)
}
})
this.messageLiveSignalRDataSourceService.getMessageUpdate().pipe(
filter((message) => {
return !message?.requestId?.startsWith(InstanceId)
})
).subscribe(async (message) => {
if(message?.id) {
this.SocketMessageUpdateUseCaseService.execute(message)
}
})
this.messageLiveSignalRDataSourceService.getMessage().pipe(
filter((message) => {
if(!message?.requestId?.startsWith(InstanceId) == false) {
// console.log('exclude my message---')
}
return !message?.requestId?.startsWith(InstanceId)
})
).subscribe(async (message) => {
if(message?.id) {
console.log('create message')
this.SocketMessageCreateUseCaseService.execute(message)
}
})
2024-08-06 11:24:00 +01:00
this.messageLiveSignalRDataSourceService.getData().pipe(
filter((message) => {
if(message?.method == 'AvailableUsers') {
// console.log('exclude my message---')
return true
}
})
).subscribe(async (message) => {
console.log('123', message)
this.MemberListUpdateStatusUseCaseService.execute(message.data as any)
})
2024-08-02 16:20:26 +01:00
}
2024-07-31 17:23:44 +01:00
messageDelete(data: {roomId, messageId}) {
const params = {
...data,
senderId: SessionStore.user.UserId,
}
return this.MessageDeleteLiveUseCaseService.execute(params)
}
2024-08-02 11:34:57 +01:00
reactToMessage(input: MessageReactionInput) {
return this.MessageReactionUseCaseService.execute(input);
}
2024-08-02 12:40:34 +01:00
updateMessage(input: MessageUpdateInput) {
return this.MessageUpdateUseCaseService.execute(input);
}
2024-08-06 11:24:00 +01:00
setAdmin(input: MemberSetAdminDTO) {
return this.MemberAdminUseCaseService.execute(input)
}
sendMessage(input: MessageEntity) {
return this.MessageCreateUseCaseService.execute(input);
}
2024-08-13 10:52:35 +01:00
2024-08-13 17:05:46 +01:00
getMessageAttachmentByMessageId(input: MessageAttachmentByMessageIdInput) {
return this.MessageAttachmentByMessageIdService.execute(input)
}
2024-08-13 10:52:35 +01:00
listenToIncomingMessage(roomId:string) {
return this.ListenMessageByRoomIdNewUseCase.execute({roomId})
}
listenToDeleteMessage(roomId: string) {
return this.ListenMessageDeleteService.execute({roomId})
}
listenToUpdateMessage(roomId: string) {
return this.ListenMessageUpdateByRoomIdUseCase.execute({roomId})
}
listenToSendMessage(roomId: string) {
return this.ListenSendMessageUseCase.execute({roomId})
}
2024-07-31 17:23:44 +01:00
}
2024-08-02 11:34:57 +01:00