diff --git a/main.py b/main.py index 35d534b..032277e 100644 --- a/main.py +++ b/main.py @@ -1,32 +1,70 @@ from flask import Flask, request, jsonify import datetime +from transliterate import translit +import aiosqlite +import asyncio + + +DATABASE = 'translit.db' # Путь к файлу БД app = Flask(__name__) -# Хранилище для истории запросов -history = [] -@app.route('/api/store', methods=['POST']) -def api(): +async def init_db(): # Инициализация БД + async with aiosqlite.connect(DATABASE) as db: + await db.execute(""" + CREATE TABLE IF NOT EXISTS translit ( + id INTEGER PRIMARY KEY, + original_text TEXT NOT NULL, + translit TEXT NOT NULL + ) + """) + await db.commit() + +@app.route('/api/store', methods=['POST']) # Транслитерация и сохранение в БД +async def history_store(): try: - data = request.json - if not data: - return jsonify({"error": "Invalid JSON"}), 400 - - # Добавляем данные в историю с меткой времени - entry = { - "timestamp": datetime.datetime.now().isoformat(), - "data": data - } - history.append(entry) - - return jsonify({"message": "Data received successfully", "data": data}), 200 - except Exception as e: - return jsonify({"error": str(e)}), 500 + async with aiosqlite.connect(DATABASE) as db: + data = request.json + if not data: # Проверка json + return jsonify({"status":"error","error_message": "Invalid JSON"}), 400 + + if not data.get("data"): # Проверка на наличие ввода текста + return jsonify({"status":"error","error_message": "Enter text to transliterate"}), 400 -@app.route('/api/history', methods=['GET']) -def history_endpoint(): - return jsonify(history), 200 + tranliterated = translit(str(data.get("data")),reversed=True) + + await db.execute("INSERT INTO translit (original_text, translit) VALUES (?, ?)", + (str(data.get("data")), tranliterated)) + await db.commit() + return jsonify({"status":"success","data":tranliterated}), 200 + + except Exception as e: + return jsonify({"status":"error","error_message": str(e)}), 500 + + + +@app.route('/api/history', methods=['GET']) # Получение истории транслитов +async def history_get(): + try: + limit = request.args.get('limit') or 1 # Дефолтный лимит = 1 + if int(limit) <= 0: # проверка лимита выборки + return jsonify({"status":"error","error_message": "Limit must be >0"}), 400 + + async with aiosqlite.connect(DATABASE) as db: + db.row_factory = aiosqlite.Row + async with db.execute("SELECT * FROM translit ORDER BY id DESC LIMIT "+str(limit)) as cursor: + rows = await cursor.fetchall() + await cursor.close() + + response_data = [] + for row in rows: + response_data.append(dict(row)) # Преобразование в словарь + return jsonify({"status":"success","data":response_data}), 200 + + except Exception as e: + return jsonify({"status":"error","error_message": str(e)}), 500 if __name__ == '__main__': + asyncio.run(init_db()) app.run(debug=True) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..676948b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +Flask==3.1.0 +transliterate==1.10.2 +lvldb==0.1.2 \ No newline at end of file diff --git a/translit.db b/translit.db new file mode 100644 index 0000000..f5f7df2 Binary files /dev/null and b/translit.db differ