From e992a38235221fb8d46839ba8e29d2a263575b65 Mon Sep 17 00:00:00 2001 From: aknuth Date: Sat, 7 Dec 2024 21:30:32 +0100 Subject: [PATCH] move image, update image --- deck_endpoints.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 5 ++++- requirements.txt | 7 ++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 requirements.txt diff --git a/deck_endpoints.py b/deck_endpoints.py index 27cb007..4d932d5 100644 --- a/deck_endpoints.py +++ b/deck_endpoints.py @@ -241,7 +241,7 @@ def update_image(): return jsonify({'error': 'Deck not found'}), 404 # 1. Lösche alle Einträge für das Deck ohne bildname - cursor.execute('DELETE FROM Deck WHERE deckname = ? AND bildname IS NULL', (deckname,)) + cursor.execute('DELETE FROM Deck WHERE deckname = ? AND bildid = ?', (deckname,bildid)) inserted_image_ids = [] @@ -369,6 +369,60 @@ def delete_images_by_bildid(bildid): finally: conn.close() +@deck_bp.route('/api/decks/images//move', methods=['POST']) +def move_image(bildid): + """ + Verschiebt alle Einträge einer bildid von ihrem aktuellen Deck in ein neues Deck. + Das übergebene JSON sollte { "targetDeckId": "neuerDeckname" } sein. + """ + try: + data = request.get_json() + if not data or 'targetDeckId' not in data: + return jsonify({'error': 'No targetDeckId provided'}), 400 + + target_deck_id = data['targetDeckId'] + + # Sicherheitsmaßnahme: Nur erlaubte Zeichen im targetDeckId + if not all(c.isalnum() or c in ('_', '-') for c in target_deck_id): + logger.warning(f"Ungültiger targetDeckId angefordert: {target_deck_id}") + return jsonify({'error': 'Invalid targetDeckId'}), 400 + + conn = get_db_connection() + cursor = conn.cursor() + + # Überprüfen, ob es Einträge mit der gegebenen bildid gibt + cursor.execute('SELECT COUNT(*) as count FROM Deck WHERE bildid = ?', (bildid,)) + result = cursor.fetchone() + if result['count'] == 0: + conn.close() + return jsonify({'error': 'No entries found for the given image ID'}), 404 + + # Update deckname für alle Einträge mit der bildid + cursor.execute('UPDATE Deck SET deckname = ? WHERE bildid = ?', (target_deck_id, bildid)) + updated_rows = cursor.rowcount + conn.commit() + conn.close() + + logger.info(f"Bild mit bildid '{bildid}' wurde in das Deck '{target_deck_id}' verschoben. Aktualisierte Einträge: {updated_rows}") + + return jsonify({'status': 'success', 'moved_entries': updated_rows}), 200 + + except sqlite3.Error as e: + if conn: + conn.rollback() + logger.error(f"Datenbankfehler beim Verschieben der Image-Einträge für '{bildid}': {e}") + return jsonify({'error': 'Database error', 'details': str(e)}), 500 + + except Exception as e: + if conn: + conn.rollback() + logger.error(f"Unerwarteter Fehler beim Verschieben der Image-Einträge für '{bildid}': {e}") + return jsonify({'error': 'Failed to move image entries', 'details': str(e)}), 500 + + finally: + if conn: + conn.close() + # Sicherstellen, dass die Datenbank existiert if not os.path.exists(DATABASE): init_db() diff --git a/pyproject.toml b/pyproject.toml index 3033053..a519212 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,6 @@ +[virtualenvs] +in-project = true + [tool.poetry] name = "vocab-backend" version = "0.1.0" @@ -6,7 +9,7 @@ authors = ["Andreas Knuth "] readme = "README.md" [tool.poetry.dependencies] -python = "^3.10" +python = "^3.12" flask = "^2.2.3" paddleocr = "^2.9.1" pillow = "^9.4.0" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..fad7532 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +flask==2.2.3 +paddleocr==2.9.1 +pillow>=10.0.0 +numpy>=1.24.4,<2.0.0 +opencv-python==4.6.0.66 +paddlepaddle==2.6.2 +werkzeug<2.3 \ No newline at end of file