2024-07-31 17:23:44 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
2024-08-18 13:27:57 +01:00
|
|
|
import { MessageDeleteLiveUseCaseService } from 'src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service'
|
2024-07-31 17:23:44 +01:00
|
|
|
import { SessionStore } from 'src/app/store/session.service';
|
2024-08-18 13:27:57 +01:00
|
|
|
import { MessageReactionInput, MessageReactionUseCaseService } from 'src/app/module/chat/domain/use-case/message-reaction-by-id-use-case.service';
|
|
|
|
|
import { MessageUpdateInput, MessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/message-update-by-id-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';
|
2024-08-07 11:18:41 +01:00
|
|
|
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-18 13:27:57 +01:00
|
|
|
import { DownloadMessageAttachmentUserCaseService } from 'src/app/module/chat/domain/use-case/message-download-attachment-user-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';
|
2024-08-18 13:27:57 +01:00
|
|
|
import { GetRoomByIdUseCaseService } from './use-case/room-get-by-id-use-case.service';
|
|
|
|
|
import { DeleteRoomUseCaseService } from './use-case/room-delete-by-id-use-case.service';
|
|
|
|
|
import { CreateRoomUseCaseService } from './use-case/room-create-use-case.service';
|
|
|
|
|
import { RoomLeaveUseCase } from './use-case/room-leave-by-id-use-case.service';
|
2024-08-14 15:29:16 +01:00
|
|
|
import { SyncAllRoomMessagesService } from './use-case/sync-all-room-messages.service';
|
2024-08-13 10:52:35 +01:00
|
|
|
import { ListenSendMessageUseCase } from './use-case/listen-send-message.service'
|
2024-08-18 13:27:57 +01:00
|
|
|
import { RemoveMemberUseCaseService } from './use-case/member/-use-case.service'
|
|
|
|
|
import { AddMemberUseCaseService } from './use-case/member-add-use-case.service'
|
|
|
|
|
import { UpdateRoomByIdUseCaseService } from './use-case/room-update-by-id-use-case.service'
|
|
|
|
|
import { GetMessageAttachmentLocallyUseCaseService } from 'src/app/module/chat/domain/use-case/message-get-attachment-localy-use-case.service';
|
|
|
|
|
import { GetRoomListUseCaseService } from 'src/app/module/chat/domain/use-case/room-get-list-use-case.service';
|
2024-08-02 16:20:26 +01:00
|
|
|
import { filter } from 'rxjs/operators';
|
2024-08-07 11:18:41 +01:00
|
|
|
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';
|
2024-08-18 13:27:57 +01:00
|
|
|
import { RoomInputDTO } from '../data/dto/room/roomInputDTO';
|
|
|
|
|
import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO';
|
|
|
|
|
import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto';
|
|
|
|
|
import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO';
|
2024-08-07 11:18:41 +01:00
|
|
|
|
|
|
|
|
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,
|
2024-08-07 11:18:41 +01:00
|
|
|
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,
|
2024-08-14 15:29:16 +01:00
|
|
|
private MessageAttachmentByMessageIdService: MessageAttachmentByMessageIdUseCase,
|
2024-08-16 17:17:32 +01:00
|
|
|
private SyncAllRoomMessagesService: SyncAllRoomMessagesService,
|
2024-08-17 22:05:57 +01:00
|
|
|
private DownloadMessageAttachmentUserCaseService: DownloadMessageAttachmentUserCaseService,
|
2024-08-18 13:27:57 +01:00
|
|
|
private GetMessageAttachmentLocallyUseCaseService: GetMessageAttachmentLocallyUseCaseService,
|
|
|
|
|
private GetRoomListUseCaseService: GetRoomListUseCaseService,
|
|
|
|
|
private GetRoomByIdUseCaseService: GetRoomByIdUseCaseService,
|
|
|
|
|
private DeleteRoomUseCaseService: DeleteRoomUseCaseService,
|
|
|
|
|
private CreateRoomUseCaseService: CreateRoomUseCaseService,
|
|
|
|
|
private RoomLeaveUseCase: RoomLeaveUseCase,
|
|
|
|
|
private AddMemberUseCaseService: AddMemberUseCaseService,
|
|
|
|
|
private UpdateRoomByIdUseCaseService: UpdateRoomByIdUseCaseService,
|
|
|
|
|
private RemoveMemberUseCaseService: RemoveMemberUseCaseService
|
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
|
|
|
|
2024-08-18 13:27:57 +01:00
|
|
|
async start() {
|
|
|
|
|
await this.getRoomList();
|
|
|
|
|
this.asyncAllRoomMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removeMemberToRoom(data: UserRemoveListInputDTO) {
|
|
|
|
|
return this.RemoveMemberUseCaseService.execute(data)
|
|
|
|
|
}
|
|
|
|
|
|
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)
|
|
|
|
|
}
|
2024-08-07 11:18:41 +01:00
|
|
|
|
|
|
|
|
sendMessage(input: MessageEntity) {
|
|
|
|
|
return this.MessageCreateUseCaseService.execute(input);
|
|
|
|
|
}
|
2024-08-13 10:52:35 +01:00
|
|
|
|
2024-08-14 15:29:16 +01:00
|
|
|
asyncAllRoomMessage() {
|
|
|
|
|
return this.SyncAllRoomMessagesService.execute()
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-17 22:05:57 +01:00
|
|
|
getMessageAttachmentByMessageId(input: MessageEntity) {
|
2024-08-13 17:05:46 +01:00
|
|
|
return this.MessageAttachmentByMessageIdService.execute(input)
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-16 17:17:32 +01:00
|
|
|
downloadMessageAttachmentByMessageId(input: MessageAttachmentByMessageIdInput) {
|
|
|
|
|
return this.DownloadMessageAttachmentUserCaseService.execute(input)
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-17 22:05:57 +01:00
|
|
|
getMessageAttachmentLocallyByMessageId(input: MessageAttachmentByMessageIdInput) {
|
|
|
|
|
return this.GetMessageAttachmentLocallyUseCaseService.execute(input)
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-16 17:17:32 +01:00
|
|
|
|
2024-08-18 13:27:57 +01:00
|
|
|
getRoomList() {
|
|
|
|
|
return this.GetRoomListUseCaseService.execute()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getRoomById(id: string) {
|
|
|
|
|
return this.GetRoomByIdUseCaseService.execute(id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deleteRoomById(id: string) {
|
|
|
|
|
return this.DeleteRoomUseCaseService.execute(id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
createRoom(data: RoomInputDTO) {
|
|
|
|
|
return this.CreateRoomUseCaseService.execute(data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
leaveRoom(data: UserRemoveListInputDTO) {
|
|
|
|
|
return this.RoomLeaveUseCase.execute(data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addMemberToRoom(data: AddMemberToRoomInputDTO) {
|
|
|
|
|
return this.AddMemberUseCaseService.execute(data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateRoomById(data: RoomUpdateInputDTO) {
|
|
|
|
|
return this.UpdateRoomByIdUseCaseService.execute(data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removeMember() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|