From f6094e389450b49751651b96e805a78d01ba5cbc Mon Sep 17 00:00:00 2001 From: JCtapuk Date: Wed, 28 Feb 2024 04:07:21 +0300 Subject: [PATCH 1/3] move addMessage (ignore ping/pong) --- server/api/chat-ws.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/server/api/chat-ws.ts b/server/api/chat-ws.ts index 7abafb2..ed9e3fd 100644 --- a/server/api/chat-ws.ts +++ b/server/api/chat-ws.ts @@ -1,5 +1,5 @@ -import type { Peer } from 'crossws'; -import { getQuery } from "ufo" +import type { Peer } from "crossws"; +import { getQuery } from "ufo"; const users = new Map(); @@ -11,11 +11,13 @@ export default defineWebSocketHandler({ users.set(userId, { online: true }); const stats = getStats(); - peer.send({ user: "server", message: `Welcome to the server ${userId}! (Online users: ${stats.online}/${stats.total})` }); + peer.send({ + user: "server", + message: `Welcome to the server ${userId}! (Online users: ${stats.online}/${stats.total})`, + }); peer.subscribe("chat"); peer.publish("chat", { user: "server", message: `${peer} joined!` }); - }, async message(peer, message) { console.log(`[ws] message ${peer} ${message.text()}`); @@ -31,9 +33,10 @@ export default defineWebSocketHandler({ }; peer.send(_message); // echo back peer.publish("chat", _message); - } - await addMessage(userId, message.text()); + // no spam ping and pong =) + await addMessage(userId, message.text()); + } }, close(peer, details) { @@ -50,7 +53,7 @@ export default defineWebSocketHandler({ upgrade(req) { return { headers: { - "x-powered-by": "cross-ws" + "x-powered-by": "cross-ws", }, }; }, From d32265c2bcdd5f93d99c34f69c308dd921e55353 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 28 Feb 2024 02:29:09 +0100 Subject: [PATCH 2/3] update --- server/api/chat-ws.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/server/api/chat-ws.ts b/server/api/chat-ws.ts index ed9e3fd..4cabe33 100644 --- a/server/api/chat-ws.ts +++ b/server/api/chat-ws.ts @@ -23,20 +23,20 @@ export default defineWebSocketHandler({ console.log(`[ws] message ${peer} ${message.text()}`); const userId = getUserId(peer); - if (message.text() === "ping") { peer.send({ user: "server", message: "pong" }); - } else { - const _message = { - user: userId, - message: message.text(), - }; - peer.send(_message); // echo back - peer.publish("chat", _message); - - // no spam ping and pong =) - await addMessage(userId, message.text()); + return } + + const _message = { + user: userId, + message: message.text(), + }; + peer.send(_message); // echo back + peer.publish("chat", _message); + + // Store message in database + await addMessage(userId, message.text()); }, close(peer, details) { From 577e27eacf8eb010fe934437f7d8640ba276e582 Mon Sep 17 00:00:00 2001 From: JCtapuk Date: Wed, 28 Feb 2024 18:22:23 +0300 Subject: [PATCH 3/3] [fix] add order desc and array reverse mesages --- server/utils/database.ts | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/server/utils/database.ts b/server/utils/database.ts index 02b4662..7159698 100644 --- a/server/utils/database.ts +++ b/server/utils/database.ts @@ -13,9 +13,30 @@ export function addMessage(user: string, message: string) { db.sql`INSERT INTO messages (user, message) VALUES (${user}, ${message})`; } -export async function getMessages(count = 5) { +export async function getMessages(count = 5, orderDesc: boolean = true) { const db = useDatabase(); - const { rows } = await db.sql`SELECT * FROM messages ORDER BY created_at ASC LIMIT ${count}` - return rows as { id: number, user: string, message: string, created_at: string }[]; -} + const rows = await db + .prepare( + orderDesc + ? "SELECT * FROM messages ORDER BY created_at DESC LIMIT ?" + : "SELECT * FROM messages ORDER BY created_at ASC LIMIT ?" + ) + .all(count); + + if (!rows) { + throw createError("SQL Failed"); + } + + if (orderDesc) { + //@ts-ignore + rows.reverse(); + } + + return rows as { + id: number; + user: string; + message: string; + created_at: string; + }[]; +}