85 lines
2.1 KiB
TypeScript
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",
|
|
},
|
|
});
|
|
},
|
|
});
|