save send message

This commit is contained in:
Peter Maquiran
2024-06-05 14:31:26 +01:00
parent 7705cc8d0d
commit 619465c10d
7 changed files with 62 additions and 8 deletions
@@ -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<RoomListOutPutDTO[]> {
return liveQuery(() => messageDataSource.message.toArray()) as any;
getItemsLive(roomId: string): Observable<RoomListOutPutDTO> {
return liveQuery(() => messageDataSource.message.where('roomId').equals(roomId).toArray() as any) as any
}
@@ -27,4 +27,6 @@ export class MessageRemoteDataSourceService {
async getMessagesFromRoom(id: MessageListInputDTO): DataSourceReturn<MessageListInputDTO> {
return await this.httpService.get(`${this.baseUrl}/Room/${id}/Messages`);
}
}
@@ -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<typeof MessageOutPutDTOSchema>
const ResponseSchema = z.object({
success: z.boolean(),
message: z.string(),
data: DataSchema
});
export type MessageOutPutDTO = z.infer<typeof ResponseSchema>
@@ -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)
}
}