fix(app): Add main logic of validating requests

This commit is contained in:
Black_Raven committed 2026-10-07 14:32:01 +03:00
1 parent 8f6b2bc136
commit af97cae9d8
1 file changed
+35 -15
+35 -15
View File
@@ -1,38 +1,58 @@
import json
import os
import sqlite3
from pathlib import Path from pathlib import Path
from flask import Flask, jsonify, request from flask import Flask, jsonify, request, send_file
from flask_cors import CORS from flask_cors import CORS
from pydantic import ValidationError
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
from db.InitDB import DB_PATH, init_db
from models import AIRequest
# Создаем приложение Flask # Создаем приложение Flask
app = Flask(__name__) app = Flask(__name__)
CORS(app) CORS(app)
METADATA_DIR = Path(__file__).parent / ".metadata" 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) @app.route('/AI', methods=['POST'], strict_slashes=False)
def ai_request(): def ai_request():
try: try:
id = request.form.get("id") payload = AIRequest(
text = request.form.get("text") id=request.form.get("id", ""),
files = request.files.getlist("files") text=request.form.get("text", ""),
file=[],
)
except ValidationError as e:
return jsonify({"error": e.errors()}), 422
request_dir = METADATA_DIR / (secure_filename(id) or "unknown") try:
request_dir = METADATA_DIR / (secure_filename(payload.id) or "unknown")
request_dir.mkdir(parents=True, exist_ok=True) request_dir.mkdir(parents=True, exist_ok=True)
saved_files = [] for file in request.files.getlist("files"):
for file in files:
filename = secure_filename(file.filename) filename = secure_filename(file.filename)
if not filename: if not filename:
continue continue
file.save(request_dir / filename) path = request_dir / filename
saved_files.append(filename) file.save(path)
payload.file.append(str(path))
return jsonify({ with sqlite3.connect(DB_PATH) as conn:
"id": id, conn.execute(
"text": text, "INSERT INTO requests (id, text, file) VALUES (?, ?, ?)",
"files": saved_files, (payload.id, payload.text, json.dumps(payload.file)),
}), 200 )
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: except Exception as e:
return jsonify({"error": str(e)}), 500 return jsonify({"error": str(e)}), 500