from flask import Flask, request, jsonify, send_from_directory import datetime from transliterate import translit import aiosqlite import asyncio DATABASE = 'translit.db' # Путь к файлу БД app = Flask(__name__) 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('/') def serve_index(): return send_from_directory('./static', 'index.html') @app.route('/api/store', methods=['POST']) # Транслитерация и сохранение в БД async def history_store(): try: 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 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)