add member repository

This commit is contained in:
Peter Maquiran
2024-10-09 16:28:51 +01:00
parent e626883b5c
commit 9c65bee69c
15 changed files with 153 additions and 29 deletions
+8 -1
View File
@@ -40,6 +40,8 @@ import { IUserPhotoLocalRepository } from 'src/app/core/chat/repository/user-pho
import { UserPhotoLocalRepository } from './data/repository/user-foto/user-photo-local-repository.service';
import { IUserPhotoRemoteRepository } from 'src/app/core/chat/repository/user-photo/user-photo-remote-repository';
import { UserPhotoRemoteRepositoryService } from './data/repository/user-foto/user-photo-remote-repository.service';
import { IMemberSocketRepository } from 'src/app/core/chat/repository/member/member-socket-repository';
import { MemberSocketRepositoryService } from './data/repository/member/member-socket-repository.service';
@NgModule({
imports: [HttpModule],
providers: [
@@ -73,6 +75,10 @@ import { UserPhotoRemoteRepositoryService } from './data/repository/user-foto/us
provide: IMemberRemoteRepository,
useClass: MemberListRemoteRepository
},
{
provide: IMemberSocketRepository,
useClass: MemberSocketRepositoryService
},
// room repository
{
provide: IRoomLocalRepository,
@@ -113,7 +119,8 @@ import { UserPhotoRemoteRepositoryService } from './data/repository/user-foto/us
{
provide: IUserPhotoRemoteRepository,
useClass: UserPhotoRemoteRepositoryService
}
},
],
declarations: [],
schemas: [],
@@ -0,0 +1,40 @@
import { Injectable } from '@angular/core';
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
import { IMemberSocketRepository } from 'src/app/core/chat/repository/member/member-socket-repository';
import { IRemoveRoomMemberOutput, RemoveRoomMemberInput } from '../../../domain/use-case/member/member-remove-socket-use-case.service';
import { InstanceId } from '../../../domain/chat-service.service';
import { v4 as uuidv4 } from 'uuid'
import { filter, map, tap } from 'rxjs/operators';
import { SocketMessage } from 'src/app/infra/socket/signalR/signalR';
@Injectable({
providedIn: 'root'
})
export class MemberSocketRepositoryService implements IMemberSocketRepository {
constructor(
private socket: SignalRService
) {
// this.listenToRemoveMember()
}
async removeMember(data: RemoveRoomMemberInput) {
const result = await this.socket.sendData<any>({
method: 'RemoveRoomMember',
data: {
...data,
requestId: InstanceId +'@'+ uuidv4()
},
})
return result;
}
listenToRemoveMember() {
return this.socket.getData().pipe(
filter((e) : e is SocketMessage<IRemoveRoomMemberOutput>=> e?.method == 'GroupDeletedMembers'),
map((e)=> e.data),
)
}
}
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { liveQuery, Observable } from 'Dexie';
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
import { BehaviorSubject, from } from 'rxjs';
import { BehaviorSubject, from, Subject } from 'rxjs';
import { RoomTable, RoomTableSchema } from 'src/app/infra/database/dexie/instance/chat/schema/room';
import { chatDatabase } from 'src/app/infra/database/dexie/instance/chat/service';
import { IRoomLocalRepository } from 'src/app/core/chat/repository/room/room-local-repository';
@@ -13,7 +13,7 @@ import { RoomType } from 'src/app/core/chat/entity/group';
})
export class RoomLocalRepository extends DexieRepository<RoomTable, RoomTable> implements IRoomLocalRepository {
private listenCreateSyncSubject : BehaviorSubject<RoomTable> = new BehaviorSubject<RoomTable>(null);
private listenCreateSyncSubject : Subject<RoomTable> = new Subject<RoomTable>();
constructor() {
super(chatDatabase.room, RoomTableSchema)
@@ -23,6 +23,7 @@ import { ListenSendMessageUseCase } from './use-case/message/listen-send-message
import { SendLocalMessagesUseCaseService } from './use-case/message/messages-send-offline-use-case.service'
import { RemoveMemberUseCaseService } from './use-case/member/-use-case.service'
import { AddMemberUseCaseService } from './use-case/member/member-add-use-case.service'
import { MemberRemoveSocketUseCaseService, RemoveRoomMemberInput } from './use-case/member/member-remove-socket-use-case.service'
import { RoomUpdateInputDTO, UpdateRoomByIdUseCaseService } from './use-case/room/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'
@@ -117,7 +118,8 @@ export class ChatServiceService {
private roomGetLocalByIdService: RoomGetLocalByIdService,
private roomSetLocalToFalseByIdService: RoomSetLocalToFalseByIdService,
private roomUpdateNameSyncService: RoomUpdateNameSyncService,
private RoomDirectOnSetIdUseCaseService: RoomDirectOnSetIdUseCaseService
private RoomDirectOnSetIdUseCaseService: RoomDirectOnSetIdUseCaseService,
private MemberRemoveSocketUseCaseService: MemberRemoveSocketUseCaseService
) {
this.MessageSocketRepositoryService.listenToDeleteMessages()
.pipe()
@@ -272,6 +274,10 @@ export class ChatServiceService {
return this.AddMemberUseCaseService.execute(data)
}
removeMember(input: RemoveRoomMemberInput) {
return this.MemberRemoveSocketUseCaseService.execute(input)
}
updateRoomById(data: RoomUpdateInputDTO) {
return this.UpdateRoomByIdUseCaseService.execute(data)
}
@@ -283,9 +289,6 @@ export class ChatServiceService {
sendLocalMessages() {
return this.SendLocalMessagesUseCaseService.execute()
}
removeMember() {
}
sendReadAt(sendReadAt: MessageMarkAsReadInput) {
return this.MessageMarkAsReadUseCaseService.execute(sendReadAt)
@@ -1,6 +1,5 @@
import { Injectable } from '@angular/core';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service';
import { MemberListRemoteRepository } from '../../../data/repository/member/member-list-remote-repository.service';
import { UserRemoveListInputDTO } from '../room/room-leave-by-id-use-case.service';
@@ -0,0 +1,36 @@
import { Injectable } from '@angular/core';
import { IMemberSocketRepository } from 'src/app/core/chat/repository/member/member-socket-repository';
import { z } from 'zod';
export const RemoveRoomMemberInputSchema = z.object({
roomId: z.string(),
members: z.number().array()
})
export type RemoveRoomMemberInput = z.infer<typeof RemoveRoomMemberInputSchema>
export const RemoveRoomMemberOutputSchema = z.object({
userPhoto: z.string().nullable(),
wxFullName: z.string().optional(),
wxUserId: z.number(),
wxeMail: z.string(),
}).array()
export type IRemoveRoomMemberOutput = z.infer<typeof RemoveRoomMemberOutputSchema>
@Injectable({
providedIn: 'root'
})
export class MemberRemoveSocketUseCaseService {
constructor(
private socketRepository: IMemberSocketRepository
) { }
async execute(input: RemoveRoomMemberInput) {
return this.socketRepository.removeMember(input)
}
}
@@ -27,7 +27,6 @@ export class MessageLocalGetByIdService {
})
}
else if(input.roomId) {
console.log('find(')
return this.messageLocalRepository.find({roomId: input.roomId})
} else if (input.receiverId) {
return this.messageLocalRepository.find({receiverId: parseInt(input.receiverId)})