from flask import Blueprint, render_template, request, jsonify, make_response from app import db from app.models import Folder, User import uuid import logging main = Blueprint('main', __name__) # For prototype, use a fixed user ID MOCK_USER_ID = '123e4567-e89b-12d3-a456-426614174000' @main.route('/api/folders/new', methods=['GET']) def new_folder_modal(): # Return the add folder modal response = make_response(render_template('partials/folder_modal.html')) response.headers['HX-Trigger'] = 'open-modal' return response @main.route('/') def index(): # Ensure the mock user exists user = User.query.get(MOCK_USER_ID) if not user: user = User(id=MOCK_USER_ID, email='prototype@example.com') db.session.add(user) db.session.commit() folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('index.html', folders=folders) @main.route('/api/folders', methods=['POST']) def add_folder(): try: # Get form data instead of JSON name = request.form.get('name') rule_text = request.form.get('rule_text') priority = request.form.get('priority') if not name: # Return the folders list unchanged with an error message folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() # We'll add error handling in the template return render_template('partials/folders_list.html', folders=folders) # Create new folder folder = Folder( user_id=MOCK_USER_ID, name=name, rule_text=rule_text, priority=int(priority) if priority else None ) db.session.add(folder) db.session.commit() # Get updated list of folders folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() # Return the updated folders list HTML response = make_response(render_template('partials/folders_list.html', folders=folders)) response.headers['HX-Trigger'] = 'close-modal' return response except Exception as e: # Print unhandled exceptions to the console as required logging.exception("Error adding folder: %s", e) db.session.rollback() # Return the folders list unchanged folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) @main.route('/api/folders/', methods=['DELETE']) def delete_folder(folder_id): try: # Find the folder by ID folder = Folder.query.filter_by(id=folder_id, user_id=MOCK_USER_ID).first() if not folder: # Folder not found folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) # Delete the folder db.session.delete(folder) db.session.commit() # Get updated list of folders folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() # Return the updated folders list HTML return render_template('partials/folders_list.html', folders=folders) except Exception as e: # Print unhandled exceptions to the console as required logging.exception("Error deleting folder: %s", e) db.session.rollback() # Return the folders list unchanged folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) @main.route('/api/folders/', methods=['PUT']) def update_folder(folder_id): try: # Find the folder by ID folder = Folder.query.filter_by(id=folder_id, user_id=MOCK_USER_ID).first() if not folder: # Folder not found folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) # Get form data name = request.form.get('name') rule_text = request.form.get('rule_text') priority = request.form.get('priority') if not name: # Return the folders list unchanged with an error message folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) # Update folder folder.name = name folder.rule_text = rule_text folder.priority = int(priority) if priority else None db.session.commit() # Get updated list of folders folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() response = make_response(render_template('partials/folders_list.html', folders=folders)) response.headers['HX-Trigger'] = 'close-modal' return response except Exception as e: # Print unhandled exceptions to the console as required logging.exception("Error updating folder: %s", e) db.session.rollback() # Return the folders list unchanged folders = Folder.query.filter_by(user_id=MOCK_USER_ID).all() return render_template('partials/folders_list.html', folders=folders) @main.route('/api/folders/', methods=['GET']) def get_folder(folder_id): try: # Find the folder by ID folder = Folder.query.filter_by(id=folder_id, user_id=MOCK_USER_ID).first() if not folder: return jsonify({'error': 'Folder not found'}), 404 # Return folder data as JSON return jsonify({ 'id': folder.id, 'name': folder.name, 'rule_text': folder.rule_text, 'priority': folder.priority }) except Exception as e: # Print unhandled exceptions to the console as required logging.exception("Error getting folder: %s", e) return jsonify({'error': 'Error retrieving folder'}), 500 @main.route('/api/folders//edit', methods=['GET']) def edit_folder_modal(folder_id): try: # Find the folder by ID folder = Folder.query.filter_by(id=folder_id, user_id=MOCK_USER_ID).first() if not folder: return jsonify({'error': 'Folder not found'}), 404 # Return the edit folder modal with folder data response = make_response(render_template('partials/folder_modal.html', folder=folder)) response.headers['HX-Trigger'] = 'open-modal' return response except Exception as e: # Print unhandled exceptions to the console as required logging.exception("Error getting folder for edit: %s", e) return jsonify({'error': 'Error retrieving folder'}), 500