3
0

2 کامیت‌ها 43a4d4effd ... 79fdfd07bf

نویسنده SHA1 پیام تاریخ
  Adam Dominec 79fdfd07bf Merge branch 'master' into sada_otazek 2 هفته پیش
  anna ca3f9e0b10 Změnit "app/questions.py" 1 ماه پیش
2فایلهای تغییر یافته به همراه37 افزوده شده و 154 حذف شده
  1. 34 4
      app/app.py
  2. 3 150
      app/templates/home.html

+ 34 - 4
app/app.py

@@ -1,4 +1,11 @@
-from flask import Flask, render_template
+import json
+import os
+import random
+from flask import Flask, jsonify, render_template, request
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+SCHEMA_PATH = os.path.normpath(os.path.join(BASE_DIR, '..', 'schema.json'))
+print(SCHEMA_PATH)
 
 app = Flask(__name__)
 
@@ -10,9 +17,32 @@ def index():
 def health():
     return "Health check passed!"
 
-@app.route("/api/questions/")
-def questions_index():
-    return "Hello, World!"
+def load_questions():
+    with open(SCHEMA_PATH, 'r', encoding='utf-8') as file:
+        return json.load(file)
+
+@app.route('/api/questions', methods=['GET'])
+def get_questions():
+    count_param = request.args.get('count', default=3)
+    try:
+        count = int(count_param)
+    except ValueError:
+        return jsonify({"error": "Parametr 'count' musí být platné číslo."}), 400
+    if count < 0:
+        return jsonify({"error": "Počet otázek nemůže být záporný."}), 400
+
+    try:
+        all_questions = load_questions()
+    except Exception as e:
+        print(e)
+        return jsonify({"error": "Soubor schema.json nebyl nalezen nebo je prázdný."}), 500
+
+    if count > len(all_questions):
+        count = len(all_questions)
+
+    random_questions = random.sample(all_questions, count)
+    return random_questions
+
 
 if __name__ == "__main__":
     app.run(port=5000)

+ 3 - 150
app/templates/home.html

@@ -42,155 +42,8 @@ function quizApp() {
 </template>
 <template x-if="zacalqiz">
 <div class="flex flex-col items-center justify-center min-h-screen p-4" x-data="{
-  zacalqiz: false,
   skoncilqiz: false,
   CurrentOtazka: 0,
-  ZvoleneOtazky: [
-    {
-      id: 1,
-      question: 'Jak nejraději strávíš svůj volný čas?',
-      options: [
-        'Studium biologie',
-        'Diskuse o dějinách a filmech',
-        'Řešení matematických rovnic',
-        'Hokejový trénink'
-      ],
-      results: [
-        'Svobodová',
-        'Nájemník',
-        'Stejskal',
-        'Ambroz'
-      ]
-    },
-    {
-      id: 2,
-      question: 'jakého eventu se zúčastníš?',
-      options: [
-        'čtenářská čajovna',
-        'fotbalový zápas',
-        'chemická exkurze',
-        'turnaj v poítačových hrách'
-      ],
-      results: [
-        'Jílek',
-        'Orr',
-        'Ekrtová',
-        'Helgert'
-      ]
-    },
-    {
-      id: 3,
-      question: 'Co uděláš když student nepochopí látku?',
-      options: [
-        'trpělivě mu to několikrát vysvětlíš na příkladech',
-        'nechápeš co na tom nechápe',
-        'odběhneš od tématu a pak nestíháš',
-        'začneš diskuzi'
-      ],
-      results: [
-        'Ekrtová',
-        'Stejskal',
-        'Nájemník',
-        'Jílek'
-      ]
-    },
-    {
-      id: 4,
-      question: 'Co uděláš když studenti hlučí?',
-      options: [
-        'začneš šeptat',
-        'napomeneš je, s dotazem jestli je to nezajímá',
-        'je ti to jedno',
-        'poprosíš o klid'
-      ],
-      results: [
-        'Ambroz',
-        'Nájemník',
-        'Stejskal',
-        'Ekrtová'
-      ]
-    },
-    {
-      id: 5,
-      question: 'jak často po tobě někdo něco potřebuje?',
-      options: [
-        'Každou chvíli pomáháš s technikou',
-        'víš všechno a o všech, pořád se někdo ptá',
-        'Občas odpískáš fotbal, nebo organizuješ jazykové certifikáty',
-        'každou volnou chvíli někoho doučuješ'
-      ],
-      results: [
-        'Helgert',
-        'Svobodová',
-        'Orr',
-        'Ekrtová'
-      ]
-    },
-    {
-      id: 6,
-      question: 'Jak často jsi ve škole?',
-      options: [
-        'nikdy',
-        'každý den',
-        'téměř každý den',
-        'několikrát týdně'
-      ],
-      results: [
-        'Ambroz',
-        'Svobodová',
-        'Ekrtová',
-        'Stejskal'
-      ]
-    },
-    {
-      id: 7,
-      question: 'Máš vlasy?',
-      options: [
-        'Ne',
-        'Ano a hodně',
-        'Normální množství',
-        'nechávám si je narůst a pak na ježka'
-      ],
-      results: [
-        'Ambroz',
-        'Svobodová',
-        'Ekrtová',
-        'Jílek'
-      ]
-    },
-    {
-      id: 8,
-      question: 'Jaký kroužek zorganizuješ?',
-      options: [
-        'Basketbal',
-        'studium mikoživočichů',
-        'nezorganizuješ',
-        'turnaje v počítačových hrách'
-      ],
-      results: [
-        'Nájemník',
-        'Svobodová',
-        'Stejskal',
-        'Helgert'
-      ]
-    },
-    {
-      id: 9,
-      question: 'Co je tvoje fav zvíře?',
-      options: [
-        'Panda',
-        'Lochneska',
-        'asi nemáš',
-        'něco hrozně mikro a exotického'
-      ],
-      results: [
-        'Ekrtová',
-        'Orr',
-        'Stejskal',
-        'Svobodová'
-      ]
-    }
-  ],
   SvobodaBody: 0,
   SvobodovaBody: 0,
   ReditelkBody: 0,
@@ -235,10 +88,10 @@ function quizApp() {
         </h1>
 
         <div class="mb-8">
-            <p class="text-lg font-semibold text-gray-700 mb-4 text-center" x-text="ZvoleneOtazky[CurrentOtazka]['question']"></p>
+            <p class="text-lg font-semibold text-gray-700 mb-4 text-center" x-text="otazky[CurrentOtazka]['question']"></p>
 
             <div class="space-y-3">
-                <template x-for="(option, index) in ZvoleneOtazky[CurrentOtazka]['options']" :key="index">
+                <template x-for="(option, index) in otazky[CurrentOtazka]['options']" :key="index">
                     <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
                         <input 
                             type="radio"
@@ -256,7 +109,7 @@ function quizApp() {
             <button class="px-6 py-2 bg-gray-200 text-gray-700 rounded font-bold hover:bg-gray-300 transition" x-on:click="CurrentOtazka = Math.max(CurrentOtazka - 1, 0)" x-bind:disabled="CurrentOtazka === 0">
                 Předchozí
             </button>
-            <button class="px-6 py-2 gjs-blue text-white rounded font-bold hover:opacity-90 transition" x-on:click="CurrentOtazka = Math.min(CurrentOtazka + 1, ZvoleneOtazky.length - 1)" x-bind:disabled="CurrentOtazka >= ZvoleneOtazky.length - 1">
+            <button class="px-6 py-2 gjs-blue text-white rounded font-bold hover:opacity-90 transition" x-on:click="CurrentOtazka = Math.min(CurrentOtazka + 1, otazky.length - 1)" x-bind:disabled="CurrentOtazka >= otazky.length - 1">
                 Další
             </button>
         </div>