63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
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
|