diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index ecfa550..300d4b2 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -1,5 +1,10 @@ import cassandra from 'cassandra-driver'; +interface Messages { + messages: cassandra.types.Row[] | null; + error: Error | null; +} + class Db { private client: cassandra.Client; @@ -47,15 +52,21 @@ class Db { } // Get messages method - async getMessages(channelName: string, limit: number): Promise { + async getMessages(channelName: string, limit: number): Promise { try { const res = await this.client.execute( `SELECT * FROM channels.${channelName} WHERE channel_name = '${channelName}' ORDER BY timestamp DESC LIMIT ${limit}`, ); - return res.rows; + return { + messages: res.rows, + error: null, + }; } catch (e) { console.log(`Error fetching messages: ${(e as Error).message}`); - return; + return { + messages: null, + error: e as Error, + }; } } } @@ -85,4 +96,4 @@ try { const db = new Db(client); await db.createChannel('general'); -export { db }; +export { db, type Messages }; diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index a01469a..0b7dad2 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,19 +1,5 @@ -import type { TypeMessage } from '$lib'; -import { db } from '$lib/server/db'; +import { redirect } from '@sveltejs/kit'; -export async function load(): Promise<{ messages: TypeMessage[] }> { - const rows = await db.getMessages('general', 50); - const messages: TypeMessage[] = rows - ? rows.map((value) => { - return { - message: value.message_content, - user: value.sender.toString(), - imageSrc: `https://api.dicebear.com/9.x/identicon/svg?seed=${value.sender.toString()}`, - }; - }) - : []; - - return { - messages: messages ?? [], - }; +export function load(): void { + redirect(308, '/channel/general'); } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index d15a2fa..e69de29 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,58 +0,0 @@ - - -{#snippet message(messages: TypeMessage[])} - {#each messages as message} - - {/each} -{/snippet} -
-
- {@render message(log)} - {@render message(data.messages)} -
-
- - -
-
diff --git a/src/routes/channel/[channel]/+page.server.ts b/src/routes/channel/[channel]/+page.server.ts new file mode 100644 index 0000000..0f377f3 --- /dev/null +++ b/src/routes/channel/[channel]/+page.server.ts @@ -0,0 +1,26 @@ +import type { TypeMessage } from '$lib'; +import { error } from '@sveltejs/kit'; +import { db } from '$lib/server/db'; + +export async function load({ params }): Promise<{ messages: TypeMessage[] }> { + let messages: TypeMessage[]; + const rows = await db.getMessages(params.channel, 50); + + if (rows.messages !== null) { + messages = rows + ? rows.messages.map((value) => { + return { + message: value.message_content, + user: value.sender.toString(), + imageSrc: `https://api.dicebear.com/9.x/identicon/svg?seed=${value.sender.toString()}`, + }; + }) + : []; + } else { + return error(404, `Channel '${params.channel}' does not exist`); + } + + return { + messages: messages ?? [], + }; +} diff --git a/src/routes/channel/[channel]/+page.svelte b/src/routes/channel/[channel]/+page.svelte new file mode 100644 index 0000000..d15a2fa --- /dev/null +++ b/src/routes/channel/[channel]/+page.svelte @@ -0,0 +1,58 @@ + + +{#snippet message(messages: TypeMessage[])} + {#each messages as message} + + {/each} +{/snippet} +
+
+ {@render message(log)} + {@render message(data.messages)} +
+
+ + +
+