move image, update image

This commit is contained in:
aknuth 2024-12-07 21:30:32 +01:00
parent b7c3b58157
commit e992a38235
3 changed files with 66 additions and 2 deletions

View File

@ -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/<bildid>/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()

View File

@ -1,3 +1,6 @@
[virtualenvs]
in-project = true
[tool.poetry]
name = "vocab-backend"
version = "0.1.0"
@ -6,7 +9,7 @@ authors = ["Andreas Knuth <andreas.knuth@gmail.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
python = "^3.12"
flask = "^2.2.3"
paddleocr = "^2.9.1"
pillow = "^9.4.0"

7
requirements.txt Normal file
View File

@ -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