Skip to content

Commit

Permalink
Fixed bug with messages not saving
Browse files Browse the repository at this point in the history
  • Loading branch information
y9san9 committed Nov 30, 2024
1 parent 2aafd38 commit cb92b90
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 14 deletions.
13 changes: 11 additions & 2 deletions src/components/chat/ChatDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import {handleSocketEventsUsecase} from "@/usecase/chat/socket-event-usecase/han
import {createSendMessageUsecase} from "@/usecase/chat/send-message/send-message-usecase.ts";
import {messagesHistoryUsecase} from "@/usecase/chat/messages-history-usecase/messages-history-usecase.ts";
import {OptionPredicator} from "typia/lib/programmers/helpers/OptionPredicator";
import {useCallback} from "react";
import {saveMessageUsecase} from "@/usecase/chat/save-message-usecase/save-messaga-usecase.ts";

export interface ChatDependencies {
chat: Chat;
Expand Down Expand Up @@ -83,10 +85,17 @@ export function createChatDependencies(
});
socketEventUsecase();

const messageHistoryUsecase = messagesHistoryUsecase({
const messagesHistory = messagesHistoryUsecase({
chat, events, getNickname, messagesStorage: persistence.message
});
messageHistoryUsecase();
messagesHistory();

const saveMessage = saveMessageUsecase({
events: events,
getMessageKey: getMessageKey,
messageStorage: persistence.message
});
saveMessage();

return {
events, sendMessage: sendTextMessage,
Expand Down
2 changes: 1 addition & 1 deletion src/persistence/message/create-message-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export function createMessageStorage(db: IDBPDatabase): MessageStorage {
const cursor = await db.transaction("message")
.objectStore("message")
.index("chatId")
.openCursor(IDBKeyRange.only(chat.chatId), "prev");
.openCursor(IDBKeyRange.only(chat.chatId));

if (!cursor) return;

Expand Down
5 changes: 5 additions & 0 deletions src/usecase/chat/event-bus/event-bus.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@

import {Flow} from "@/coroutines/flow.ts";
import {Message} from "@/usecase/chat/message/message.ts";
import {Chat} from "@/persistence/chat/chat.ts";

export type ChatEvent = {
type: "save";
chat: Chat;
message: Message & { nonce: { server: number } };
} | {
type: "history";
message: Message;
} | {
Expand Down
34 changes: 34 additions & 0 deletions src/usecase/chat/save-message-usecase/save-messaga-usecase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import {EventBus} from "@/usecase/chat/event-bus/event-bus.ts";
import {MessageStorage} from "@/persistence/message/message-storage.ts";
import {GetMessageKeyUsecase} from "@/usecase/chat/get-message-key-usecase/get-message-key-usecase.ts";
import {launch} from "@/coroutines/launch.ts";

export interface SaveMessageUsecase {
(): void;
}

export function saveMessageUsecase(
{events, messageStorage, getMessageKey}: {
events: EventBus,
messageStorage: MessageStorage,
getMessageKey: GetMessageKeyUsecase
}
): SaveMessageUsecase {
return () => {
events.flow.collect((event) => launch(async () => {
if (event.type != "save") return;

const key = await getMessageKey(event.message.nonce.server);
if (!key) return;

const message = event.message;

await messageStorage.add({
...message,
chatId: event.chat.chatId,
nonce: event.message.nonce.server,
key: key
});
}));
}
}
13 changes: 8 additions & 5 deletions src/usecase/chat/send-message/send-message-usecase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,18 @@ export function createSendMessageUsecase(
const response: SendMessageResponse = await socket.execute(request);

if (response.status) {
const event: Message & { nonce: { server: number } } = {
...message,
isSending: false,
nonce: { server: nonce },
};

events.emit({
type: "edit",
nonce: message.nonce,
message: {
...message,
isSending: false,
nonce: { server: nonce },
}
message: event
});

return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,21 @@ export function handleSocketEventsUsecase(
if (event.type == "new") {
const message = await decodeMessage(event.message);

events.emit({
type: "save",
chat: event.message,
message: {
...message,
nonce: { server: event.message.nonce }
}
});

// skip doubling of self-messages
for (const current of messagesSnapshot()) {
if ("server" in current.nonce && current.nonce.server == message.nonce.server) {
return;
}
}
await messagesStorage.add({
...message,
chatId: event.message.chatId,
nonce: event.message.nonce,
key: message.key
});

events.emit({
type: "new",
Expand Down

0 comments on commit cb92b90

Please sign in to comment.