import json import os import sqlite3 from pathlib import Path from flask import Flask, jsonify, request, send_file from flask_cors import CORS from pydantic import ValidationError from werkzeug.utils import secure_filename from db.InitDB import DB_PATH, init_db from models import AIRequest # Создаем приложение Flask app = Flask(__name__) CORS(app) init_db() METADATA_DIR = Path(os.environ.get("METADATA_DIR") or Path(__file__).parent / ".metadata") RESULT_DIR = Path(os.environ.get("RESULT_DIR") or Path(__file__).parent / ".results") @app.route('/AI', methods=['POST'], strict_slashes=False) def ai_request(): try: payload = AIRequest( id=request.form.get("id", ""), text=request.form.get("text", ""), file=[], ) except ValidationError as e: return jsonify({"error": e.errors()}), 422 try: request_dir = METADATA_DIR / (secure_filename(payload.id) or "unknown") request_dir.mkdir(parents=True, exist_ok=True) for file in request.files.getlist("files"): filename = secure_filename(file.filename) if not filename: continue path = request_dir / filename file.save(path) payload.file.append(str(path)) with sqlite3.connect(DB_PATH) as conn: conn.execute( "INSERT INTO requests (id, text, file) VALUES (?, ?, ?)", (payload.id, payload.text, json.dumps(payload.file)), ) conn.commit() return jsonify(payload.model_dump()), 200 except sqlite3.IntegrityError: return jsonify({"error": f"task {payload.id} already exists"}), 409 except Exception as e: return jsonify({"error": str(e)}), 500 @app.route('/health', methods=['GET']) def health_check(): """Проверка работоспособности API""" return {"status": "ok", "message": "API is running"}, 200