// routes/home import { getKvSessionConfig, upsertKvSessionConfigAny, } from "../../utils/database.ts"; import { KvObj, QuizConfig } from "../../utils/types.ts"; import { getAllKvQuizConfigs } from "../../utils/QuizDataClient.ts"; import { define, State } from "../../utils.ts"; import { SessionCookie } from "../auth/callback.ts"; export interface AiImage { key: string[]; value: boolean; versionstamp: string; } export const handler = define.handlers({ async GET(ctx) { const req = ctx.req; const state = ctx.state as State; const stateData: SessionCookie = state.data ?? { started_on: 0, user_name: "", user_id: "", role: "", user_encrypted: false, }; // Redirect if no valid user session if (!state.stateId || !stateData.user_id) { return new Response("", { status: 302, headers: { "Location": "/", }, }); } const session = await getKvSessionConfig(stateData.user_id, state.stateId); const allQuizs = await getAllKvQuizConfigs(); const toSplice: number[] = []; session.value?.quiz_configs.forEach((quizKey, iQ: number) => { if ( !allQuizs.some((config: KvObj) => config.key[1] == quizKey[1] && config.key[2] == quizKey[2] ) ) { toSplice.push(iQ); } }); toSplice.forEach((keyIndex: number) => { session.value?.quiz_configs.splice(keyIndex, 1); }); const missing: string[][] = []; allQuizs.forEach((quizConfig) => { if ( !session.value?.quiz_configs.some((quizKey) => quizConfig.key[1] == quizKey[1] && quizConfig.key[2] == quizKey[2] ) ) { missing.push(quizConfig.key); } }); if (session.value) { session.value.quiz_configs = [...missing, ...session.value.quiz_configs]; } upsertKvSessionConfigAny(session); localStorage.setItem("lock-route", "/language/dashboard"); return new Response(null, { status: 302, headers: { "Location": "/language/dashboard", }, }); }, });