From b400cc6a4e230fa2afa544e0eec4a65ab1f39a1b Mon Sep 17 00:00:00 2001 From: 180079995 <101566121+180079995@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:21:29 +0800 Subject: [PATCH] Join session with code --- src/routes/api/session/+server.ts | 11 ++++++++ src/routes/join/+page.svelte | 44 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/routes/api/session/+server.ts b/src/routes/api/session/+server.ts index de78079..7d28388 100644 --- a/src/routes/api/session/+server.ts +++ b/src/routes/api/session/+server.ts @@ -52,6 +52,17 @@ export const POST: RequestHandler = async ({ request, locals }) => { const sessionRef = adminDb.collection('sessions').doc(); await sessionRef.set(result.data); + const code = Math.floor(100000 + Math.random() * 900000); + let Codes = adminDb.collection('temp_codes').doc(code.toString()); + await Codes.set({ + sessionId: sessionRef.id + }); + + Codes = adminDb.collection('temp_codes').doc(sessionRef.id); + await Codes.set({ + code: code + }); + return json({ success: true, sessionId: sessionRef.id diff --git a/src/routes/join/+page.svelte b/src/routes/join/+page.svelte index 9e103c1..57cfe9c 100644 --- a/src/routes/join/+page.svelte +++ b/src/routes/join/+page.svelte @@ -2,6 +2,8 @@ import { goto } from '$app/navigation'; import QrScanner from '$lib/components/QrScanner.svelte'; import { notifications } from '$lib/stores/notifications'; + import { getDoc, doc } from 'firebase/firestore'; + import { db } from '$lib/firebase'; async function handleScan(code: string) { try { @@ -16,6 +18,28 @@ console.error(e); } } + + let code = $state(''); + + async function joinwithcode() { + if (code.length != 6 || !/^\d{6}$/.test(code)) { + notifications.error('Code must be 6 digits'); + return; + } + try { + const codeDoc = await getDoc(doc(db, 'temp_codes', code)); + const sessionid = codeDoc.data()?.sessionId; + if (!sessionid) { + notifications.error('Invalid session code'); + return; + } + const url = new URL(`/session/${sessionid}`, window.location.href); + await goto(url); + } catch (e) { + notifications.error('Invalid session code'); + console.error(e); + } + } @@ -32,4 +56,24 @@ + +
+

Or please enter the 6-digits code to join.

+ + +