163 lines
5.0 KiB
Python
163 lines
5.0 KiB
Python
# deck_endpoints.py
|
|
|
|
from flask import Blueprint, request, jsonify
|
|
import sqlite3
|
|
import os
|
|
|
|
deck_bp = Blueprint('deck_bp', __name__)
|
|
|
|
DATABASE = 'mydatabase.db'
|
|
|
|
def get_db_connection():
|
|
conn = sqlite3.connect(DATABASE)
|
|
conn.row_factory = sqlite3.Row
|
|
return conn
|
|
|
|
# Erstellen der Tabellen, falls sie nicht existieren
|
|
def init_db():
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
# Tabelle Deck erstellen
|
|
cursor.execute('''
|
|
CREATE TABLE IF NOT EXISTS Deck (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
deckname TEXT UNIQUE NOT NULL
|
|
)
|
|
''')
|
|
# Tabelle Image erstellen
|
|
cursor.execute('''
|
|
CREATE TABLE IF NOT EXISTS Image (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
deckid INTEGER,
|
|
bildname TEXT,
|
|
iconindex INTEGER,
|
|
x1 REAL,
|
|
x2 REAL,
|
|
y1 REAL,
|
|
y2 REAL,
|
|
FOREIGN KEY(deckid) REFERENCES Deck(id)
|
|
)
|
|
''')
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
@deck_bp.route('/api/decks', methods=['POST'])
|
|
def create_deck():
|
|
data = request.get_json()
|
|
if not data or 'deckname' not in data:
|
|
return jsonify({'error': 'No deckname provided'}), 400
|
|
|
|
deckname = data['deckname']
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
try:
|
|
cursor.execute('INSERT INTO Deck (deckname) VALUES (?)', (deckname,))
|
|
conn.commit()
|
|
deck_id = cursor.lastrowid
|
|
conn.close()
|
|
return jsonify({'status': 'success', 'deck_id': deck_id}), 201
|
|
except sqlite3.IntegrityError:
|
|
conn.close()
|
|
return jsonify({'error': 'Deckname already exists'}), 400
|
|
|
|
@deck_bp.route('/api/decks', methods=['GET'])
|
|
def get_decks():
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
decks = cursor.execute('SELECT * FROM Deck').fetchall()
|
|
deck_list = []
|
|
for deck in decks:
|
|
deck_id = deck['id']
|
|
deck_name = deck['deckname']
|
|
# Alle Images für dieses Deck abrufen
|
|
images = cursor.execute('''
|
|
SELECT
|
|
bildname AS name,
|
|
iconindex,
|
|
x1,
|
|
x2,
|
|
y1,
|
|
y2
|
|
FROM Image
|
|
WHERE deckid = ?
|
|
''', (deck_id,)).fetchall()
|
|
images_list = [dict(image) for image in images]
|
|
# Deck mit Namen und zugehörigen Images hinzufügen
|
|
deck_dict = {
|
|
'name': deck_name,
|
|
'images': images_list
|
|
}
|
|
deck_list.append(deck_dict)
|
|
conn.close()
|
|
return jsonify(deck_list)
|
|
|
|
@deck_bp.route('/api/decks/<deckname>', methods=['DELETE'])
|
|
def delete_deck(deckname):
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
# Zuerst die Images löschen, die zu diesem Deck gehören
|
|
cursor.execute('SELECT id FROM Deck WHERE deckname = ?', (deckname,))
|
|
deck = cursor.fetchone()
|
|
if deck:
|
|
deck_id = deck['id']
|
|
cursor.execute('DELETE FROM Image WHERE deckid = ?', (deck_id,))
|
|
# Dann das Deck löschen
|
|
cursor.execute('DELETE FROM Deck WHERE id = ?', (deck_id,))
|
|
conn.commit()
|
|
conn.close()
|
|
return jsonify({'status': 'success'}), 200
|
|
else:
|
|
conn.close()
|
|
return jsonify({'error': 'Deck not found'}), 404
|
|
|
|
@deck_bp.route('/image', methods=['PUT'])
|
|
def update_image():
|
|
data = request.get_json()
|
|
if not data:
|
|
return jsonify({'error': 'No data provided'}), 400
|
|
|
|
required_fields = ['deckid', 'bildname', 'iconindex', 'x1', 'x2', 'y1', 'y2']
|
|
if not all(field in data for field in required_fields):
|
|
return jsonify({'error': 'Missing fields in data'}), 400
|
|
|
|
deckid = data['deckid']
|
|
bildname = data['bildname']
|
|
iconindex = data['iconindex']
|
|
x1 = data['x1']
|
|
x2 = data['x2']
|
|
y1 = data['y1']
|
|
y2 = data['y2']
|
|
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('''
|
|
INSERT INTO Image (deckid, bildname, iconindex, x1, x2, y1, y2)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
''', (deckid, bildname, iconindex, x1, x2, y1, y2))
|
|
conn.commit()
|
|
image_id = cursor.lastrowid
|
|
conn.close()
|
|
return jsonify({'status': 'success', 'image_id': image_id}), 201
|
|
|
|
@deck_bp.route('/image/<bildname>', methods=['GET'])
|
|
def get_images_by_bildname(bildname):
|
|
conn = get_db_connection()
|
|
images = conn.execute('SELECT * FROM Image WHERE bildname = ?', (bildname,)).fetchall()
|
|
conn.close()
|
|
image_list = [dict(image) for image in images]
|
|
return jsonify(image_list)
|
|
|
|
@deck_bp.route('/image/<bildname>/<int:iconindex>', methods=['GET'])
|
|
def get_image_by_bildname_and_index(bildname, iconindex):
|
|
conn = get_db_connection()
|
|
image = conn.execute('SELECT * FROM Image WHERE bildname = ? AND iconindex = ?', (bildname, iconindex)).fetchone()
|
|
conn.close()
|
|
if image is None:
|
|
return jsonify({'error': 'Image not found'}), 404
|
|
else:
|
|
return jsonify(dict(image)), 200
|
|
|
|
# Sicherstellen, dass die Datenbank existiert
|
|
if not os.path.exists(DATABASE):
|
|
init_db()
|