first commit
This commit is contained in:
182
app/routes/main.py
Normal file
182
app/routes/main.py
Normal file
@@ -0,0 +1,182 @@
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify
|
||||
from flask_login import login_required, current_user
|
||||
from app.models import SavedQuery, DatabaseConnection
|
||||
from app.services.database_service import DatabaseService
|
||||
from app.services.database_manager import DatabaseManager
|
||||
from app import db
|
||||
import traceback
|
||||
|
||||
main_bp = Blueprint('main', __name__)
|
||||
|
||||
@main_bp.route('/')
|
||||
@login_required
|
||||
def dashboard():
|
||||
# Lade gespeicherte Queries des Benutzers
|
||||
saved_queries = SavedQuery.query.filter_by(user_id=current_user.id).all()
|
||||
|
||||
# Lade verfügbare Datenbankverbindungen
|
||||
db_manager = DatabaseManager()
|
||||
available_connections = db_manager.get_available_connections()
|
||||
|
||||
return render_template('dashboard.html',
|
||||
saved_queries=saved_queries,
|
||||
available_connections=available_connections)
|
||||
|
||||
@main_bp.route('/execute_query', methods=['POST'])
|
||||
@login_required
|
||||
def execute_query():
|
||||
data = request.get_json()
|
||||
query = data.get('query', '').strip()
|
||||
connection = data.get('connection', 'oracle') # Standard: Oracle
|
||||
|
||||
if not query:
|
||||
return jsonify({'error': 'Query ist leer'}), 400
|
||||
|
||||
try:
|
||||
# Verwende ausgewählte Datenbankverbindung
|
||||
db_manager = DatabaseManager()
|
||||
db_service = db_manager.get_database_service(connection)
|
||||
results = db_service.execute_query(query)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'results': results,
|
||||
'connection': connection
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'error': f'Fehler beim Ausführen der Query: {str(e)}',
|
||||
'traceback': traceback.format_exc()
|
||||
}), 500
|
||||
|
||||
@main_bp.route('/get_tables')
|
||||
@login_required
|
||||
def get_tables():
|
||||
connection = request.args.get('connection', 'oracle')
|
||||
|
||||
try:
|
||||
db_manager = DatabaseManager()
|
||||
db_service = db_manager.get_database_service(connection)
|
||||
tables = db_service.get_tables()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'tables': tables,
|
||||
'connection': connection
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'error': f'Fehler beim Laden der Tabellen: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@main_bp.route('/get_table_schema/<table_name>')
|
||||
@login_required
|
||||
def get_table_schema(table_name):
|
||||
connection = request.args.get('connection', 'oracle')
|
||||
|
||||
try:
|
||||
db_manager = DatabaseManager()
|
||||
db_service = db_manager.get_database_service(connection)
|
||||
schema = db_service.get_table_schema(table_name)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'schema': schema,
|
||||
'connection': connection
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'error': f'Fehler beim Laden des Tabellenschemas: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@main_bp.route('/save_query', methods=['POST'])
|
||||
@login_required
|
||||
def save_query():
|
||||
data = request.get_json()
|
||||
name = data.get('name', '').strip()
|
||||
description = data.get('description', '').strip()
|
||||
query = data.get('query', '').strip()
|
||||
|
||||
if not name or not query:
|
||||
return jsonify({'error': 'Name und Query sind erforderlich'}), 400
|
||||
|
||||
# Prüfe ob Query-Name bereits existiert
|
||||
existing = SavedQuery.query.filter_by(name=name, user_id=current_user.id).first()
|
||||
if existing:
|
||||
return jsonify({'error': 'Query-Name bereits vergeben'}), 400
|
||||
|
||||
try:
|
||||
saved_query = SavedQuery(
|
||||
name=name,
|
||||
description=description,
|
||||
query_text=query,
|
||||
user_id=current_user.id
|
||||
)
|
||||
|
||||
db.session.add(saved_query)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'Query erfolgreich gespeichert',
|
||||
'query': saved_query.to_dict()
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
return jsonify({'error': f'Fehler beim Speichern: {str(e)}'}), 500
|
||||
|
||||
@main_bp.route('/delete_query/<int:query_id>', methods=['DELETE'])
|
||||
@login_required
|
||||
def delete_query(query_id):
|
||||
try:
|
||||
query = SavedQuery.query.filter_by(id=query_id, user_id=current_user.id).first()
|
||||
if not query:
|
||||
return jsonify({'error': 'Query nicht gefunden'}), 404
|
||||
|
||||
db.session.delete(query)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'Query erfolgreich gelöscht'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
return jsonify({'error': f'Fehler beim Löschen: {str(e)}'}), 500
|
||||
|
||||
@main_bp.route('/test_connection/<connection_name>')
|
||||
@login_required
|
||||
def test_connection(connection_name):
|
||||
try:
|
||||
db_manager = DatabaseManager()
|
||||
result = db_manager.test_connection(connection_name)
|
||||
|
||||
return jsonify(result)
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': f'Fehler beim Testen der Verbindung: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@main_bp.route('/get_connections')
|
||||
@login_required
|
||||
def get_connections():
|
||||
try:
|
||||
db_manager = DatabaseManager()
|
||||
connections = db_manager.get_available_connections()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'connections': connections
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'error': f'Fehler beim Laden der Verbindungen: {str(e)}'
|
||||
}), 500
|
||||
Reference in New Issue
Block a user