import "dotenv/config"; import { drizzle } from "drizzle-orm/node-postgres"; import { dane, punkty } from "@/src/db/schema"; import { sql, eq } from "drizzle-orm"; import { BasicQuestion } from "~/types/basic"; import arrayShuffle from "array-shuffle"; export default defineEventHandler(async (event) => { async function getFromDb(points: number | string) { return await db .select({ id: dane.id, nr_pytania: dane.nr_pytania, pytanie: dane.pytanie, poprawna_odp: dane.poprawna_odp, media: dane.media, kategorie: dane.kategorie, nazwa_media_pjm_tresc_pyt: dane.nazwa_media_pjm_tresc_pyt, pytanie_eng: dane.pytanie_eng, pytanie_de: dane.pytanie_de, pytanie_ua: dane.pytanie_ua, liczba_pkt: punkty.liczba_pkt, }) .from(dane) .innerJoin(punkty, eq(dane.nr_pytania, punkty.nr_pytania)) .where( sql`(lower(${dane.poprawna_odp})='tak' or lower(${ dane.poprawna_odp })='nie') and ${punkty.liczba_pkt}=${+points}` ); } const query = getQuery(event); const category = query.category; console.log(typeof category); if (typeof category != "undefined" && typeof category != "string") { throw new Error( "category argument has to be string (or not to be defined at all)" ); } const db = drizzle(process.env.DATABASE_URL!); const randomizedQuestions: BasicQuestion[] = []; for (let [key, value] of Object.entries({ 1: 4, 2: 6, 3: 10 })) { const questionsKeyPoints: BasicQuestion[] = await getFromDb(key); const chosenRandomQuestions: BasicQuestion[] = []; const randoms: Array = []; for (let j = 0; j < value; j++) { let randomized = Math.floor(Math.random() * (questionsKeyPoints.length - 1 + 1)) + 0; while (randoms.includes(randomized)) { randomized = Math.floor(Math.random() * (questionsKeyPoints.length - 1 + 1)) + 0; } randoms.push(randomized); if ( questionsKeyPoints[randomized].kategorie .split(",") .includes(category ?? "B") ) { chosenRandomQuestions.push(questionsKeyPoints[randomized]); } else { j--; } } chosenRandomQuestions.forEach((q) => randomizedQuestions.push(q)); } return arrayShuffle(randomizedQuestions); });