recei and clear the code

This commit is contained in:
Peter Maquiran
2024-08-21 20:14:48 +01:00
parent 82c67b8976
commit 24aac56824
36 changed files with 319 additions and 246 deletions
@@ -27,6 +27,7 @@ import { AddMemberUseCaseService } from './use-case/member-add-use-case.service'
import { UpdateRoomByIdUseCaseService } from './use-case/room-update-by-id-use-case.service'
import { SocketConnectUseCaseService } from './use-case/socket-connect-use-case.service'
import { MessageMarkAsReadUseCaseService } from './use-case/message/message-mark-as-read-use-case.service'
import { MessageMarkAllMessageAsReadByRoomIdInputSchema, MessageMarkAllMessageAsReadByRoomIdService } from './use-case/message/message-mark-all-message-as-read-by-room-id.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';
import { filter } from 'rxjs/operators';
@@ -78,7 +79,8 @@ export class ChatServiceService {
private MessageReadAtByIdUseCaseService: MessageReadAtByIdUseCaseService,
private SendLocalMessagesUseCaseService: SendLocalMessagesUseCaseService,
private MessageMarkAsReadUseCaseService: MessageMarkAsReadUseCaseService,
private SocketConnectUseCaseService: SocketConnectUseCaseService
private SocketConnectUseCaseService: SocketConnectUseCaseService,
private MessageMarkAllMessageAsReadByRoomIdService: MessageMarkAllMessageAsReadByRoomIdService
) {
this.messageLiveSignalRDataSourceService.getMessageDelete()
.pipe()
@@ -182,6 +184,7 @@ export class ChatServiceService {
}
getRoomList() {
return this.GetRoomListUseCaseService.execute()
}
@@ -226,6 +229,10 @@ export class ChatServiceService {
return this.MessageMarkAsReadUseCaseService.execute(sendReadAt)
}
markAllMessagesAsRead(input: MessageMarkAllMessageAsReadByRoomIdInputSchema) {
return this.MessageMarkAllMessageAsReadByRoomIdService.execute(input)
}
listenToIncomingMessage(roomId:string) {
return this.ListenMessageByRoomIdNewUseCase.execute({roomId})
}
@@ -1,9 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class RoomExpirationService {
constructor() { }
}
@@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';
import { RoomService } from './room.service';
describe('RoomService', () => {
let service: RoomService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(RoomService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
@@ -0,0 +1,31 @@
import { Injectable } from '@angular/core';
import { RoomSocketRepositoryService } from 'src/app/module/chat/data/repository/room/room-socket-repository.service'
@Injectable({
providedIn: 'root'
})
export class RoomService {
constructor(
private RoomSocketRepositoryService: RoomSocketRepositoryService
) {
}
init() {
this.OnReceiveCreateRoom()
this.OnDeleteCreateRoom()
}
OnReceiveCreateRoom() {
this.RoomSocketRepositoryService.listenToCreateRoom().subscribe((data)=> {
console.log('OnReceiveCreateRoom', data)
})
}
OnDeleteCreateRoom() {
this.RoomSocketRepositoryService.listenToCreateRoom().subscribe((data)=> {
console.log('OnDeleteCreateRoom7', data)
})
}
}
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { AddMemberToRoomInputDTO } from '../../data/dto/room/addMemberToRoomInputDto';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
@Injectable({
providedIn: 'root'
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { z } from "zod";
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
// Define the schema for the entire response
const MemberSetAdminDTOSchema = z.object({
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { UserRemoveListInputDTO } from '../../../data/dto/room/userRemoveListInputDTO';
import { RoomRemoteDataSourceService } from '../../../data/repository/room-remote-repository.service';
import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service';
@Injectable({
providedIn: 'root'
@@ -18,6 +18,7 @@ import { RoomType } from "src/app/module/chat/domain/entity/group";
import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer';
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service'
import { SessionStore } from 'src/app/store/session.service';
const MessageInputUseCaseSchema = z.object({
memberId: z.number(),
roomId: z.string(),
@@ -39,7 +40,7 @@ export class MessageCreateUseCaseService {
constructor(
private AttachmentLocalRepositoryService: AttachmentLocalDataSource,
private messageLocalDataSourceService: MessageLocalDataSourceService,
private messageLiveSignalRDataSourceService: SignalRService,
private MessageSocketRepositoryService: MessageSocketRepositoryService,
private messageSocketRepositoryService: MessageSocketRepositoryService,
private MemberListLocalRepository: MemberListLocalRepository
) { }
@@ -99,7 +100,7 @@ export class MessageCreateUseCaseService {
let sendMessageResult: Result<MessageOutPutDataDTO, any>
if(messageEnum == RoomType.Group) {
const DTO = MessageMapper.fromDomain(message, message.requestId)
sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
sendMessageResult = await this.MessageSocketRepositoryService.sendGroupMessage(DTO)
} else {
if(message.receiverId) {
@@ -113,7 +114,7 @@ export class MessageCreateUseCaseService {
if(getRoomMembers.isOk()) {
message.receiverId = getRoomMembers.value.wxUserId
const DTO = MessageMapper.fromDomain(message, message.requestId)
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
sendMessageResult = await this.messageSocketRepositoryService.sendGroupMessage(DTO)
} else {
console.log('not found direct users', getRoomMembers.error)
}
@@ -0,0 +1,43 @@
import { Injectable } from '@angular/core';
import { z } from 'zod';
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service'
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service'
import { SessionStore } from 'src/app/store/session.service';
const MessageMarkAllMessageAsReadByRoomIdInputSchema = z.object({
roomId: z.string(),
})
export type MessageMarkAllMessageAsReadByRoomIdInputSchema = z.infer<typeof MessageMarkAllMessageAsReadByRoomIdInputSchema>
/**
* @description avoid using it, avoid duplicate query. do it on the UI layer as the component load the message.
*/
@Injectable({
providedIn: 'root'
})
export class MessageMarkAllMessageAsReadByRoomIdService {
constructor(
private MessageLocalDataSourceService: MessageLocalDataSourceService,
private MessageSocketRepositoryService: MessageSocketRepositoryService
) { }
async execute(input: MessageMarkAllMessageAsReadByRoomIdInputSchema) {
const messages = await this.MessageLocalDataSourceService.find({roomId:input.roomId})
if(messages.isOk()) {
for(const message of messages.value) {
this.MessageSocketRepositoryService.sendReadAt({
memberId: SessionStore.user.UserId,
messageId: message.id,
roomId: input.roomId,
requestId: 'uuid'
});
}
}
}
}
@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { MessageLocalDataSourceService } from '../../data/repository/message/message-local-data-source.service';
import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service';
import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO';
import { MessageTable } from '../../infra/database/dexie/schema/message';
import { SignalRService } from '../../infra/socket/signal-r.service';
@@ -14,7 +15,7 @@ import { AttachmentLocalDataSource } from '../../data/repository/attachment-loca
export class SendLocalMessagesUseCaseService {
constructor(
private messageLiveSignalRDataSourceService: SignalRService,
private MessageSocketRepositoryService: MessageSocketRepositoryService,
private messageLocalDataSourceService: MessageLocalDataSourceService,
private AttachmentRepositoryService: AttachmentLocalDataSource,
) { }
@@ -47,7 +48,7 @@ export class SendLocalMessagesUseCaseService {
const DTO = MessageMapper.fromDomain(message, requestId)
await this.messageLocalDataSourceService.update(message.$id, { sending: true })
const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
const sendMessageResult = await this.MessageSocketRepositoryService.sendGroupMessage(DTO)
if(sendMessageResult.isOk()) {
@@ -1,10 +1,10 @@
import { Injectable } from '@angular/core';
import { create } from 'domain';
import { SessionStore } from 'src/app/store/session.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { RoomInputDTO } from '../../data/dto/room/roomInputDTO';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
@Injectable({
providedIn: 'root'
@@ -2,8 +2,8 @@ import { Injectable } from '@angular/core';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { isHttpResponse } from 'src/app/services/http.service';
import { RoomByIdInputDTO } from '../../data/dto/room/roomByIdInputDTO';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
@Injectable({
providedIn: 'root'
@@ -3,8 +3,8 @@ import { id } from 'date-fns/locale';
import { isHttpResponse } from 'src/app/services/http.service';
import { roomListDetermineChanges } from '../../data/async/list/rooms/roomListChangeDetector';
import { roomMemberListDetermineChanges } from '../../data/async/list/rooms/roomMembersChangeDetector';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
import { MemberListLocalRepository } from '../../data/repository/member-list-local-repository.service';
import { MemberListMapper } from '../mapper/memberLIstMapper';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { roomListDetermineChanges } from '../../data/async/list/rooms/roomListChangeDetector';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { isHttpResponse } from 'src/app/services/http.service';
import { CronJobService } from 'src/app/utils/task-scheduler'
@@ -1,8 +1,8 @@
import { Injectable } from '@angular/core';
import { UserRemoveListInputDTO } from '../../data/dto/room/userRemoveListInputDTO';
import { isHttpResponse } from 'src/app/services/http.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
@Injectable({
providedIn: 'root'
@@ -1,8 +1,8 @@
import { Injectable } from '@angular/core';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { RoomUpdateInputDTO } from '../../data/dto/room/roomUpdateInputDTO';
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
@Injectable({
providedIn: 'root'
@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service';
import { XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer';
@Injectable({
providedIn: 'root'
@@ -10,8 +11,9 @@ export class SocketConnectUseCaseService {
private MessageSocketRepositoryService: MessageSocketRepositoryService
) { }
execute() {
return this.MessageSocketRepositoryService.connect()
@XTracerAsync({name:'SocketConnectUseCaseService', module:'chat', bugPrint: true})
async execute() {
return await this.MessageSocketRepositoryService.connect()
}
@@ -0,0 +1,16 @@
import { Injectable } from '@angular/core';
import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service';
@Injectable({
providedIn: 'root'
})
export class SocketJoinUseCaseService {
constructor(
private MessageSocketRepositoryService: MessageSocketRepositoryService
) { }
execute() {}
}
@@ -5,7 +5,7 @@ import { MessageTable } from '../../infra/database/dexie/schema/message';
import { MessageRemoteDataSourceService } from '../../data/repository/message/message-remote-data-source.service';
import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service';
import { ok } from 'neverthrow';
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service';
import { SessionStore } from 'src/app/store/session.service';
import { Logger } from 'src/app/services/logger/main/service';
import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer';
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { SignalRService } from '../../infra/socket/signal-r.service';
import { SessionStore } from 'src/app/store/session.service';
import { UserTypingRemoteRepositoryService } from '../../data/repository/user-typing-live-data-source.service';
@Injectable({
providedIn: 'root'
@@ -8,15 +9,11 @@ import { SessionStore } from 'src/app/store/session.service';
export class SendTypingUseCaseService {
constructor(
private messageLiveSignalRDataSourceService: SignalRService,
private UserTypingRemoteRepositoryService: UserTypingRemoteRepositoryService,
) { }
execute(roomId) {
return this.messageLiveSignalRDataSourceService.sendTyping({
roomId,
UserName:SessionStore.user.FullName,
userId: SessionStore.user.UserId
})
return this.UserTypingRemoteRepositoryService.sendTyping(roomId)
}
}