From 44986bfa23fe71df6a35a9b06acdcc4ca34cf0eb Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 10 May 2025 22:24:33 +0200 Subject: [PATCH] "feat: Refactor UI update for my_my_account_account template" --- __pycache__/app.cpython-313.pyc | Bin 89669 -> 90940 bytes app.py | 89 ++++++- templates/my_account.html | 435 ++++++++++++++++++++++++++++++++ 3 files changed, 523 insertions(+), 1 deletion(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 2cb22aa82bc8f7a76263d65545ccdd5ffd883a6e..035c71e50fb87d9a7366f34e745b76d15061732f 100644 GIT binary patch delta 11124 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 delta 10808 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 diff --git a/app.py b/app.py index 2b712f8..18bf024 100644 --- a/app.py +++ b/app.py @@ -733,7 +733,94 @@ def delete_mindmap(mindmap_id): flash('Mindmap erfolgreich gelöscht!', 'success') return redirect(url_for('profile')) -# API-Endpunkte für Mindmap-Daten +# API-Endpunkte für UserMindmap CRUD-Operationen +@app.route('/api/mindmaps', methods=['POST']) +@login_required +def api_create_user_mindmap(): + data = request.get_json() + name = data.get('name') + description = data.get('description') + is_private = data.get('is_private', True) + + if not name: + return jsonify({'error': 'Name ist erforderlich'}), 400 + + new_mindmap = UserMindmap( + name=name, + description=description, + user_id=current_user.id, + is_private=is_private + ) + db.session.add(new_mindmap) + db.session.commit() + return jsonify({ + 'id': new_mindmap.id, + 'name': new_mindmap.name, + 'description': new_mindmap.description, + 'is_private': new_mindmap.is_private, + 'user_id': new_mindmap.user_id, + 'created_at': new_mindmap.created_at.isoformat(), + 'last_modified': new_mindmap.last_modified.isoformat() + }), 201 + +@app.route('/api/mindmaps', methods=['GET']) +@login_required +def api_get_user_mindmaps(): + mindmaps = UserMindmap.query.filter_by(user_id=current_user.id).all() + return jsonify([{ + 'id': m.id, + 'name': m.name, + 'description': m.description, + 'is_private': m.is_private, + 'created_at': m.created_at.isoformat(), + 'last_modified': m.last_modified.isoformat() + } for m in mindmaps]) + +@app.route('/api/mindmaps/', methods=['GET']) +@login_required +def api_get_user_mindmap_detail(mindmap_id): + mindmap = UserMindmap.query.filter_by(id=mindmap_id, user_id=current_user.id).first_or_404() + # Bestehende Logik von get_user_mindmap kann hier wiederverwendet oder angepasst werden + # Für eine einfache Detailansicht: + return jsonify({ + 'id': mindmap.id, + 'name': mindmap.name, + 'description': mindmap.description, + 'is_private': mindmap.is_private, + 'user_id': mindmap.user_id, + 'created_at': mindmap.created_at.isoformat(), + 'last_modified': mindmap.last_modified.isoformat(), + # Hier könnten auch Knoten und Notizen hinzugefügt werden, ähnlich wie in get_user_mindmap + }) + +@app.route('/api/mindmaps/', methods=['PUT']) +@login_required +def api_update_user_mindmap(mindmap_id): + mindmap = UserMindmap.query.filter_by(id=mindmap_id, user_id=current_user.id).first_or_404() + data = request.get_json() + + mindmap.name = data.get('name', mindmap.name) + mindmap.description = data.get('description', mindmap.description) + mindmap.is_private = data.get('is_private', mindmap.is_private) + + db.session.commit() + return jsonify({ + 'id': mindmap.id, + 'name': mindmap.name, + 'description': mindmap.description, + 'is_private': mindmap.is_private, + 'last_modified': mindmap.last_modified.isoformat() + }) + +@app.route('/api/mindmaps/', methods=['DELETE']) +@login_required +def api_delete_user_mindmap(mindmap_id): + mindmap = UserMindmap.query.filter_by(id=mindmap_id, user_id=current_user.id).first_or_404() + db.session.delete(mindmap) + db.session.commit() + return jsonify({'message': 'Mindmap erfolgreich gelöscht'}), 200 + +# API-Endpunkte für Mindmap-Daten (öffentlich und benutzerspezifisch) @app.route('/api/mindmap/public') def get_public_mindmap(): """Liefert die Standard-Mindmap-Struktur basierend auf Kategorien.""" diff --git a/templates/my_account.html b/templates/my_account.html index 3359758..fce6524 100644 --- a/templates/my_account.html +++ b/templates/my_account.html @@ -84,6 +84,23 @@ + + +
+
+

+ + Meine erstellten Mindmaps +

+ +
+
+ +

Lade Mindmaps...

+
+
@@ -123,6 +140,424 @@
+ + + + + +