diff --git a/web/app.py b/web/app.py index 4d29c60..e512666 100644 --- a/web/app.py +++ b/web/app.py @@ -169,12 +169,16 @@ def random_quiz_route(): data = request.json keyword = data.get('keyword') db = get_db() - quiz_master_data = db.query(QuizMaster).filter( - (QuizMaster.keyword1 == keyword) | - (QuizMaster.keyword2 == keyword) | - (QuizMaster.keyword3 == keyword) - ).all() - + + if keyword: # 特定のキーワードが指定された場合 + quiz_master_data = db.query(QuizMaster).filter( + (QuizMaster.keyword1 == keyword) | + (QuizMaster.keyword2 == keyword) | + (QuizMaster.keyword3 == keyword) + ).all() + else: # "すべて"が選択された場合、全クイズからランダムに選択 + quiz_master_data = db.query(QuizMaster).all() + if not quiz_master_data: return jsonify({'error': '指定されたキーワードでクイズマスターが見つかりません'}), 404 diff --git a/web/templates/index.html b/web/templates/index.html index 0b920f4..9804da4 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -98,6 +98,7 @@ const response = await fetch('/unique_keywords'); const keywords = await response.json(); keywords.sort(); // ここでキーワードを五十音順にソート + keywords.unshift('すべて'); // すべてを選択できるように先頭に追加 const keywordList = document.getElementById('uniqueKeywordsList'); keywordList.innerHTML = ''; keywords.forEach(keyword => { @@ -113,11 +114,11 @@ async function drawRandomQuiz(event) { event.preventDefault(); - const keyword = document.getElementById('uniqueKeywordsList').value; - if (!keyword) { - document.getElementById('message').innerText = 'キーワードを選択してください'; - return; + let keyword = document.getElementById('uniqueKeywordsList').value; + if (keyword === "すべて") { + keyword = null; // すべてを選択した場合、サーバーにnullを送信 } + try { const response = await fetch('/random_quiz', { method: 'POST',