71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
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";
|
|
|
|
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)
|
|
)
|
|
);
|
|
const randoms: Array<number> = [];
|
|
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;
|
|
});
|