diff --git a/web/app.py b/web/app.py index 25615cb..4d29c60 100644 --- a/web/app.py +++ b/web/app.py @@ -256,26 +256,21 @@ def upload_quiz_master_route(): try: if 'file' not in request.files: logger.debug('No file part in the request') - flash('No file part') - return redirect(request.url) + return jsonify({'error': 'No file part in the request'}), 400 file = request.files['file'] if file.filename == '': logger.debug('No selected file') - flash('No selected file') - return redirect(request.url) + return jsonify({'error': 'No selected file'}), 400 if file and file.filename.endswith('.csv'): uploaded_file_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename) file.save(uploaded_file_path) logger.debug(f'File {file.filename} uploaded successfully to {uploaded_file_path}') - flash('File uploaded successfully') - return redirect(url_for('quiz_master_page_route')) + return jsonify({'message': 'File uploaded successfully'}) logger.debug('Invalid file format') - flash('Invalid file format') - return redirect(request.url) + return jsonify({'error': 'Invalid file format'}), 400 except Exception as e: logger.error(f'Error during file upload: {str(e)}') - flash('Error during file upload') - return redirect(request.url) + return jsonify({'error': 'Error during file upload'}), 500 @app.route('/import_quiz_master', methods=['POST']) @login_required @@ -286,16 +281,13 @@ def import_quiz_master_route(): logger.debug(f'Starting import of file {uploaded_file_path}') process_csv(uploaded_file_path) logger.debug('File imported successfully') - flash('File imported successfully') uploaded_file_path = None # Reset after processing - return redirect(url_for('quiz_master_page_route')) + return jsonify({'message': 'File imported successfully'}) logger.debug('No file uploaded to import') - flash('No file uploaded to import') - return redirect(url_for('quiz_master_page_route')) + return jsonify({'error': 'No file uploaded to import'}), 400 except Exception as e: logger.error(f'Error during file import: {str(e)}') - flash('Error during file import') - return redirect(url_for('quiz_master_page_route')) + return jsonify({'error': 'Error during file import'}), 500 def process_csv(file_path): try: diff --git a/web/templates/quiz_master.html b/web/templates/quiz_master.html index d087ce8..a84d258 100644 --- a/web/templates/quiz_master.html +++ b/web/templates/quiz_master.html @@ -246,41 +246,52 @@ } async function uploadCsvFile(event) { - event.preventDefault(); - const form = event.target; - const formData = new FormData(form); + event.preventDefault(); + const form = event.target; + const formData = new FormData(form); - try { - const response = await fetch('/upload_quiz_master', { - method: 'POST', - body: formData - }); - const result = await response.json(); - document.getElementById('message').innerText = result.message || result.error; - if (!result.error) { - form.reset(); - } - } catch (error) { - document.getElementById('message').innerText = 'エラーが発生しました: ' + error.message; - console.error('Form submission error:', error); - } - } + try { + const response = await fetch('/upload_quiz_master', { + method: 'POST', + body: formData + }); - async function importCsvData() { - try { - const response = await fetch('/import_quiz_master', { - method: 'POST' - }); - const result = await response.json(); - document.getElementById('message').innerText = result.message || result.error; - if (!result.error) { - fetchQuizMasters(); - } - } catch (error) { - document.getElementById('message').innerText = 'エラーが発生しました: ' + error.message; - console.error('Form submission error:', error); + const result = await response.json(); + + if (response.ok) { + document.getElementById('message').innerText = result.message || 'File uploaded successfully'; + } else { + document.getElementById('message').innerText = result.error || 'File upload failed'; } + + if (!result.error) { + form.reset(); + } + } catch (error) { + document.getElementById('message').innerText = 'エラーが発生しました: ' + error.message; + console.error('Form submission error:', error); } + } + + async function importCsvData() { + try { + const response = await fetch('/import_quiz_master', { + method: 'POST' + }); + + const result = await response.json(); + + if (response.ok) { + document.getElementById('message').innerText = result.message || 'File imported successfully'; + fetchQuizMasters(); // インポート後にクイズマスターを再取得 + } else { + document.getElementById('message').innerText = result.error || 'File import failed'; + } + } catch (error) { + document.getElementById('message').innerText = 'エラーが発生しました: ' + error.message; + console.error('Form submission error:', error); + } + } function closeUpdateModal() { document.getElementById('updateModal').style.display = 'none';