|
|
import os |
|
|
from pathlib import Path |
|
|
|
|
|
from dotenv import load_dotenv |
|
|
from flask import Flask, jsonify, request |
|
|
from flask_cors import CORS |
|
|
|
|
|
from ai import generate_response |
|
|
from auth import auth_blueprint, verify_request_token |
|
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent.parent |
|
|
ENV_PATH = BASE_DIR / ".env" |
|
|
|
|
|
load_dotenv(dotenv_path=ENV_PATH) |
|
|
|
|
|
app = Flask(__name__) |
|
|
CORS(app, origins=[os.getenv("FRONTEND_URL", "http://localhost:3000")]) |
|
|
app.register_blueprint(auth_blueprint, url_prefix="/auth") |
|
|
|
|
|
|
|
|
def _validate_payload(payload): |
|
|
if not payload: |
|
|
return "Missing JSON payload." |
|
|
if "message" not in payload: |
|
|
return "Missing 'message'." |
|
|
return None |
|
|
|
|
|
|
|
|
@app.route("/chat", methods=["POST"]) |
|
|
def chat(): |
|
|
token_payload, token_error = verify_request_token() |
|
|
if token_error: |
|
|
message, status = token_error |
|
|
return jsonify({"error": message}), status |
|
|
|
|
|
user_id = token_payload.get("user_id") |
|
|
if user_id is None: |
|
|
return jsonify({"error": "Token missing user_id."}), 401 |
|
|
|
|
|
payload = request.get_json(silent=True) |
|
|
error = _validate_payload(payload) |
|
|
if error: |
|
|
return jsonify({"error": error}), 400 |
|
|
|
|
|
message = payload["message"] |
|
|
|
|
|
try: |
|
|
reply = generate_response(user_id, message) |
|
|
except Exception as exc: |
|
|
return jsonify({"error": str(exc)}), 500 |
|
|
|
|
|
return jsonify({"reply": reply}) |
|
|
|
|
|
|
|
|
@app.route("/chat/history", methods=["GET"]) |
|
|
def chat_history(): |
|
|
token_payload, token_error = verify_request_token() |
|
|
if token_error: |
|
|
message, status = token_error |
|
|
return jsonify({"error": message}), status |
|
|
|
|
|
user_id = token_payload.get("user_id") |
|
|
if user_id is None: |
|
|
return jsonify({"error": "Token missing user_id."}), 401 |
|
|
|
|
|
history = db.get_conversation_history(str(user_id)) |
|
|
return jsonify({"conversations": history}) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
app.run(host="0.0.0.0", port=5000) |
|
|
|