From af97cae9d87dce28b7db7daf05f80d5acafd84d1 Mon Sep 17 00:00:00 2001 From: Kirill Date: Wed, 7 Oct 2026 14:32:01 +0300 Subject: [PATCH] fix(app): Add main logic of validating requests --- app.py | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/app.py b/app.py index 58ae857..e33d02d 100644 --- a/app.py +++ b/app.py @@ -1,38 +1,58 @@ +import json +import os +import sqlite3 from pathlib import Path -from flask import Flask, jsonify, request +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) -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) def ai_request(): try: - id = request.form.get("id") - text = request.form.get("text") - files = request.files.getlist("files") + payload = AIRequest( + id=request.form.get("id", ""), + 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) - saved_files = [] - for file in files: + for file in request.files.getlist("files"): filename = secure_filename(file.filename) if not filename: continue - file.save(request_dir / filename) - saved_files.append(filename) + path = request_dir / filename + file.save(path) + payload.file.append(str(path)) - return jsonify({ - "id": id, - "text": text, - "files": saved_files, - }), 200 + 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