import "dotenv/config"; import { drizzle } from "drizzle-orm/node-postgres"; import { dane, punkty } from "@/src/db/schema"; import { sql, eq, isNotNull, and } from "drizzle-orm"; import { AdvancedQuestion } from "~/types/basic"; export default defineEventHandler(async (event) => { const query = getQuery(event); const amount = query?.amount; const db = drizzle(process.env.DATABASE_URL!); const questions: AdvancedQuestion[] = 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, odp_a: dane.odp_a, odp_b: dane.odp_b, odp_c: dane.odp_c, nazwa_media_pjm_tresc_odp_a: dane.nazwa_media_pjm_tresc_odp_a, nazwa_media_pjm_tresc_odp_b: dane.nazwa_media_pjm_tresc_odp_b, nazwa_media_pjm_tresc_odp_c: dane.nazwa_media_pjm_tresc_odp_c, odp_a_eng: dane.odp_a_eng, odp_b_eng: dane.odp_b_eng, odp_c_eng: dane.odp_c_eng, odp_a_de: dane.odp_a_de, odp_b_de: dane.odp_b_de, odp_c_de: dane.odp_c_de, odp_a_ua: dane.odp_a_ua, odp_b_ua: dane.odp_b_ua, odp_c_ua: dane.odp_c_ua, }) .from(dane) .innerJoin(punkty, eq(dane.nr_pytania, punkty.nr_pytania)) .where( and( isNotNull(dane.odp_a), isNotNull(dane.odp_b), isNotNull(dane.odp_c), isNotNull(dane.odp_a_eng), isNotNull(dane.odp_b_eng), isNotNull(dane.odp_c_eng), isNotNull(dane.odp_a_de), isNotNull(dane.odp_b_de), isNotNull(dane.odp_c_de) ) // sql`lower(${dane.poprawna_odp})='a' or lower(${dane.poprawna_odp})='b' or lower(${dane.poprawna_odp})='c'` // sql`${dane.odp_a} is not null or ${dane.odp_b} is not null or ${dane.odp_c} is not null` ); const randoms: Array = []; const randomizedQuestions = []; for (let i = 0; i < +(amount ?? 12); i++) { let randomized = Math.floor(Math.random() * (questions.length - 1 + 1)) + 0; while (randoms.includes(randomized)) { randomized = Math.floor(Math.random() * (questions.length - 1 + 1)) + 0; } randoms.push(randomized); if (questions[randomized].kategorie?.split(",").includes("B")) { randomizedQuestions.push(questions[randomized]); } else { i--; } } return randomizedQuestions; });