2026-01-20 09:02:26 -06:00

85 lines
2.1 KiB
TypeScript

// 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<QuizConfig>) =>
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",
},
});
},
});