diff --git a/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts index 032aa984f..5efee8ac7 100644 --- a/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts @@ -11,6 +11,7 @@ import { MessageInputDTO } from '../../dto/message/messageInputDtO'; const tableSchema = z.object({ id: z.any().optional(), + messageId: z.string().optional(), roomId: z.string().uuid(), senderId: z.number(), message: z.string(), @@ -28,7 +29,7 @@ export const messageDataSource = new Dexie('chat-message') as Dexie & { }; messageDataSource.version(1).stores({ - message: '++id, roomId, senderId, message, messageType, canEdit, oneShot, requireUnlock' + message: '++id, roomId, senderId, message, messageType, canEdit, oneShot, requireUnlock, messageId' }); @Injectable({ @@ -45,6 +46,18 @@ export class MessageLocalDataSourceService { try { const result = await messageDataSource.message.add(data) + return ok(result as string) + } catch (e) { + return err(false) + } + + } + + + async update(data: TableMessage) { + + try { + const result = await messageDataSource.message.update(data.id, data) return ok(result) } catch (e) { return err(false) @@ -52,8 +65,8 @@ export class MessageLocalDataSourceService { } - getItemsLive(): Observable { - return liveQuery(() => messageDataSource.message.toArray()) as any; + getItemsLive(roomId: string): Observable { + return liveQuery(() => messageDataSource.message.where('roomId').equals(roomId).toArray() as any) as any } diff --git a/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts index 32bef8f56..0cc28287a 100644 --- a/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts @@ -27,4 +27,6 @@ export class MessageRemoteDataSourceService { async getMessagesFromRoom(id: MessageListInputDTO): DataSourceReturn { return await this.httpService.get(`${this.baseUrl}/Room/${id}/Messages`); } + + } diff --git a/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts b/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts index c8bf10328..e33f0209b 100644 --- a/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts +++ b/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts @@ -1,9 +1,24 @@ import { z } from "zod" -const MessageOutPutDTOSchema = z.object({ - success: z.boolean(), +const DataSchema = z.object({ + id: z.string(), + chatRoomId: z.string(), + wxUserId: z.number(), + sender: z.string().nullable(), message: z.string(), - data: z.any() + messageType: z.number(), + sentAt: z.string().datetime(), + deliverAt: z.string().datetime().nullable(), + canEdit: z.boolean(), + oneShot: z.boolean(), + requireUnlock: z.boolean() }); -export type MessageOutPutDTO = z.infer + +const ResponseSchema = z.object({ + success: z.boolean(), + message: z.string(), + data: DataSchema +}); + +export type MessageOutPutDTO = z.infer diff --git a/src/app/services/Repositorys/chat/repository/message-respository.service.ts b/src/app/services/Repositorys/chat/repository/message-respository.service.ts index 9975acd79..f5eea1931 100644 --- a/src/app/services/Repositorys/chat/repository/message-respository.service.ts +++ b/src/app/services/Repositorys/chat/repository/message-respository.service.ts @@ -3,7 +3,7 @@ import { MessageRemoteDataSourceService } from '../data-source/message/message-r import { MessageLiveDataSourceService } from '../data-source/message/message-live-data-source.service'; import { MessageListInputDTO } from '../dto/message/messageListInputDTO'; import { MessageInputDTO } from '../dto/message/messageInputDtO'; -import { MessageLocalDataSourceService } from '../data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService, TableMessage } from '../data-source/message/message-local-data-source.service'; @Injectable({ providedIn: 'root' @@ -22,12 +22,32 @@ export class MessageRepositoryService { if(localActionResult.isOk()) { const sendMessageResult = await this.messageRemoteDataSourceService.sendMessage(data) + + + if(sendMessageResult.isOk()) { + + let clone: TableMessage = sendMessageResult.value.data + + clone.messageId = sendMessageResult.value.data.id + clone.id = localActionResult.value + + return this.messageLocalDataSourceService.update(clone) + } + } } + async listAllMessagesByRoomId() { + this.messageRemoteDataSourceService + } + async getMessagesFromRoom(data: MessageListInputDTO) { const result = await this.messageRemoteDataSourceService.getMessagesFromRoom(data) return result } + + getItemsLive (roomId: string) { + return this.messageLocalDataSourceService.getItemsLive(roomId) + } } diff --git a/src/app/services/Repositorys/chat/type.ts b/src/app/services/Repositorys/chat/type.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html index 6bd77f537..3d2da595c 100644 --- a/src/app/shared/chat/messages/messages.page.html +++ b/src/app/shared/chat/messages/messages.page.html @@ -40,6 +40,8 @@ MESSAGE

Room ID: {{ roomData.id }}

+ + {{ roomMessage$ | async | json }} diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index 7d926c22f..84dabb608 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -110,6 +110,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy textField = '' roomData$: Observable + roomMessage$: Observable constructor( public popoverController: PopoverController, @@ -141,6 +142,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy ngOnChanges(changes: SimpleChanges): void { this.roomData$ = this.roomRepositoryService.getItemByIdLive(this.roomId) + this.roomMessage$ = this.messageRepositoryService.getItemsLive(this.roomId) } sendTyping() {}