send direct message

This commit is contained in:
Peter Maquiran
2024-08-19 16:45:29 +01:00
parent ae50d9b3bd
commit 4fb24f7875
9 changed files with 57 additions and 27 deletions
@@ -80,12 +80,12 @@ export class RoomLocalRepository extends DexieRepository<RoomTable> {
} }
getItemsLive(): Observable<RoomListOutPutDTO[]> { getItemsLive(){
return liveQuery(() => chatDatabase.room.toArray()) as any; return liveQuery(() => chatDatabase.room.toArray());
} }
getRoomByIdLive(id: any): Observable<RoomListItemOutPutDTO | undefined> { getRoomByIdLive(id: any) {
return liveQuery(() => chatDatabase.room.get(id)) as any; return liveQuery(() => chatDatabase.room.get(id));
} }
@@ -35,6 +35,7 @@ import { RoomInputDTO } from '../data/dto/room/roomInputDTO';
import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO'; import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO';
import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto'; import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto';
import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO'; import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO';
import { RoomType } from "src/app/module/chat/domain/entity/group";
export const InstanceId = uuidv4(); export const InstanceId = uuidv4();
@@ -151,7 +152,7 @@ export class ChatServiceService {
return this.MemberAdminUseCaseService.execute(input) return this.MemberAdminUseCaseService.execute(input)
} }
sendMessage(input: MessageEntity, messageEnum: MessageEnum) { sendMessage(input: MessageEntity, messageEnum: RoomType) {
return this.MessageCreateUseCaseService.execute(input, messageEnum); return this.MessageCreateUseCaseService.execute(input, messageEnum);
} }
@@ -14,6 +14,8 @@ import { err, Result } from 'neverthrow';
import { MessageTable } from '../../infra/database/dexie/schema/message'; import { MessageTable } from '../../infra/database/dexie/schema/message';
import { MessageMapper } from '../mapper/messageMapper'; import { MessageMapper } from '../mapper/messageMapper';
import { SignalRService } from '../../infra/socket/signal-r.service'; import { SignalRService } from '../../infra/socket/signal-r.service';
import { RoomType } from "src/app/module/chat/domain/entity/group";
const MessageInputUseCaseSchema = z.object({ const MessageInputUseCaseSchema = z.object({
memberId: z.number(), memberId: z.number(),
@@ -41,7 +43,7 @@ export class MessageCreateUseCaseService {
) { } ) { }
async execute(message: MessageEntity, messageEnum: MessageEnum) { async execute(message: MessageEntity, messageEnum: RoomType) {
const validation = zodSafeValidation<MessageEntity>(MessageEntitySchema, message) const validation = zodSafeValidation<MessageEntity>(MessageEntitySchema, message)
@@ -94,7 +96,7 @@ export class MessageCreateUseCaseService {
const DTO = MessageMapper.fromDomain(message, message.requestId) const DTO = MessageMapper.fromDomain(message, message.requestId)
let sendMessageResult: Result<MessageOutPutDataDTO, any> let sendMessageResult: Result<MessageOutPutDataDTO, any>
if(messageEnum == MessageEnum.group) { if(messageEnum == RoomType.Group) {
sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO) sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
} else { } else {
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO) sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
@@ -1,5 +1,6 @@
import { z } from "zod"; import { z } from "zod";
import { EntityTable } from 'Dexie'; import { EntityTable } from 'Dexie';
import { RoomType } from "src/app/module/chat/domain/entity/group";
export const RoomTableSchema = z.object({ export const RoomTableSchema = z.object({
id: z.string(), id: z.string(),
@@ -12,6 +13,7 @@ export const RoomTableSchema = z.object({
}), }),
createdAt: z.any(), createdAt: z.any(),
expirationDate: z.any().nullable(), expirationDate: z.any().nullable(),
roomType: z.nativeEnum(RoomType)
}) })
export type RoomTable = z.infer<typeof RoomTableSchema> export type RoomTable = z.infer<typeof RoomTableSchema>
+2 -1
View File
@@ -20,6 +20,7 @@ import { Observable as DexieObservable } from 'Dexie';
import { EditGroupPage } from './modal/edit-group/edit-group.page'; import { EditGroupPage } from './modal/edit-group/edit-group.page';
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service' import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service'
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
@Component({ @Component({
selector: 'app-chat', selector: 'app-chat',
@@ -52,7 +53,7 @@ export class ChatPage implements OnInit {
routerSubscription routerSubscription
// count$: Observable<RoomRemoteDataSourceState>; // count$: Observable<RoomRemoteDataSourceState>;
items$!: DexieObservable<RoomListOutPutDTO[]>; items$!: DexieObservable<RoomTable[]>;
constructor( constructor(
private modalController: ModalController, private modalController: ModalController,
@@ -11,6 +11,7 @@ import { SessionStore } from 'src/app/store/session.service';
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
import { MessageEntity } from 'src/app/module/chat/domain/entity/message'; import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
// import { ChatSystemService } from 'src/app/services/chat/chat-system.service' // import { ChatSystemService } from 'src/app/services/chat/chat-system.service'
import { RoomType } from "src/app/module/chat/domain/entity/group";
@Component({ @Component({
selector: 'app-contacts', selector: 'app-contacts',
@@ -141,7 +142,7 @@ export class ContactsPage implements OnInit {
message.receiverId = user.wxUserId message.receiverId = user.wxUserId
message.message = 'hello' message.message = 'hello'
const result = await this.chatServiceService.sendMessage(message, MessageEnum.Direct) const result = await this.chatServiceService.sendMessage(message, RoomType.Group)
if(result.isOk()) { if(result.isOk()) {
this.close(result.value.roomId) this.close(result.value.roomId)
@@ -46,6 +46,8 @@ import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repo
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service'; import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
import { MessageRemoteDataSourceService } from 'src/app/module/chat/data/repository/message/message-remote-data-source.service'; import { MessageRemoteDataSourceService } from 'src/app/module/chat/data/repository/message/message-remote-data-source.service';
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
import { RoomType } from "src/app/module/chat/domain/entity/group";
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
@Component({ @Component({
@@ -64,6 +66,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
dmUsers: any; dmUsers: any;
downloadProgess = 0; downloadProgess = 0;
roomType!: RoomType
@Input() roomId: string; @Input() roomId: string;
@Input() showMessages: string; @Input() showMessages: string;
@@ -115,7 +118,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
textField = '' textField = ''
roomData$: DexieObservable<RoomListItemOutPutDTO | undefined> roomData$: DexieObservable<RoomTable | undefined>
roomStatus$: DexieObservable<Boolean > roomStatus$: DexieObservable<Boolean >
roomMessage$: DexieObservable<MessageTable[]> roomMessage$: DexieObservable<MessageTable[]>
roomMembers$: DexieObservable<MemberTable[] | undefined> roomMembers$: DexieObservable<MemberTable[] | undefined>
@@ -173,6 +176,15 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId) this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
this.roomData$.subscribe(e => {
console.log(e)
if(e) {
this.roomType = e.roomType
}
})
this.getMessages(); this.getMessages();
this.listenToIncomingMessage(); this.listenToIncomingMessage();
this.listenToDeleteMessage(); this.listenToDeleteMessage();
@@ -568,7 +580,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
safeFile: this.sanitiser.bypassSecurityTrustResourceUrl(this.audioRecordedDataUrl) safeFile: this.sanitiser.bypassSecurityTrustResourceUrl(this.audioRecordedDataUrl)
}] }]
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
@@ -629,7 +641,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
const data = await this.chatServiceService.sendMessage(message, MessageEnum.group) const data = await this.chatServiceService.sendMessage(message, this.roomType)
} }
@@ -811,7 +823,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }
@@ -867,7 +879,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
this.textField = '' this.textField = ''
} }
@@ -921,7 +933,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }
} }
@@ -977,7 +989,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }
} else { } else {
@@ -9,7 +9,7 @@ import { ToastService } from 'src/app/services/toast.service';
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
import { MessageEntity } from 'src/app/module/chat/domain/entity/message'; import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
import { RoomType } from "src/app/module/chat/domain/entity/group";
@Component({ @Component({
selector: 'app-contacts', selector: 'app-contacts',
@@ -179,7 +179,7 @@ export class ContactsPage implements OnInit {
message.message = 'hello' message.message = 'hello'
this.chatServiceService.sendMessage(message, MessageEnum.Direct) this.chatServiceService.sendMessage(message, RoomType.Group)
} }
} }
@@ -46,6 +46,9 @@ import { UserTypingLocalRepository } from 'src/app/module/chat/data/repository/u
import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service'; import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service';
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service'; import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
import { RoomType } from "src/app/module/chat/domain/entity/group";
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
const IMAGE_DIR = 'stored-images'; const IMAGE_DIR = 'stored-images';
@@ -108,7 +111,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null
sessionStore = SessionStore sessionStore = SessionStore
roomData$: DexieObservable<RoomListItemOutPutDTO | undefined> roomData$: DexieObservable<RoomTable | undefined>
roomStatus$: DexieObservable<Boolean > roomStatus$: DexieObservable<Boolean >
roomMessage$: DexieObservable<MessageTable[]> roomMessage$: DexieObservable<MessageTable[]>
roomMembers$: DexieObservable<MemberTable[] | undefined> roomMembers$: DexieObservable<MemberTable[] | undefined>
@@ -119,7 +122,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
selectedMessage: any = null; selectedMessage: any = null;
emojis: string[] = ['😊', '😂', '❤️', '👍', '😢']; // Add more emojis as needed emojis: string[] = ['😊', '😂', '❤️', '👍', '😢']; // Add more emojis as needed
textField = '' textField = ''
roomType!: RoomType
messageReceiveSubject: Subscription messageReceiveSubject: Subscription
messageDeleteSubject: Subscription messageDeleteSubject: Subscription
@@ -160,6 +163,14 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId) this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
this.roomData$.subscribe(e => {
console.log(e)
if(e) {
this.roomType = e.roomType
}
})
this.getMessages(); this.getMessages();
this.listenToIncomingMessage(); this.listenToIncomingMessage();
this.listenToDeleteMessage(); this.listenToDeleteMessage();
@@ -526,7 +537,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
wxUserId: SessionStore.user.UserId wxUserId: SessionStore.user.UserId
} }
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.textField = '' this.textField = ''
@@ -569,7 +580,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
setTimeout(() => { setTimeout(() => {
this.scrollToBottomClicked() this.scrollToBottomClicked()
}, 100) }, 100)
@@ -750,7 +761,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }
@@ -800,7 +811,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
this.textField = '' this.textField = ''
} }
@@ -846,7 +857,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }
} }
@@ -897,7 +908,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
return return
} }
@@ -941,7 +952,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}] }]
this.messages1[this.roomId].push(message) this.messages1[this.roomId].push(message)
this.chatServiceService.sendMessage(message, MessageEnum.group) this.chatServiceService.sendMessage(message, this.roomType)
} }