Загрузка данных


from flask import Flask, request, jsonify, session
from werkzeug.security import generate_password_hash, check_password_hash

from db import create_user, get_user_by_email

app = Flask(__name__)

app.secret_key = "SUPER_SECRET_SECRET_KEY_123"


@app.get("/")
def root():
    return jsonify({
        "ok": True,
        "message": "Flask API работает"
    })


@app.post("/register")
def register():
    try:
        data = request.get_json()

        if not data:
            return jsonify({
                "ok": False,
                "error": "Нет JSON"
            }), 400

        email = data.get("email", "").strip().lower()
        password = data.get("password", "")

        if not email or not password:
            return jsonify({
                "ok": False,
                "error": "Email и пароль обязательны"
            }), 400

        password_hash = generate_password_hash(password)

        created = create_user(
            email=email,
            password_hash=password_hash
        )

        if not created:
            return jsonify({
                "ok": False,
                "error": "Пользователь уже существует"
            }), 400

        return jsonify({
            "ok": True,
            "message": "Регистрация успешна"
        })

    except Exception as e:
        return jsonify({
            "ok": False,
            "error": str(e)
        }), 500


@app.post("/login")
def login():
    try:
        data = request.get_json()

        if not data:
            return jsonify({
                "ok": False,
                "error": "Нет JSON"
            }), 400

        email = data.get("email", "").strip().lower()
        password = data.get("password", "")

        user = get_user_by_email(email)

        if not user:
            return jsonify({
                "ok": False,
                "error": "Неверный email или пароль"
            }), 401

        if not check_password_hash(user.password_hash, password):
            return jsonify({
                "ok": False,
                "error": "Неверный email или пароль"
            }), 401

        session["user_email"] = user.email

        return jsonify({
            "ok": True,
            "message": "Вход выполнен",
            "user": {
                "email": user.email
            }
        })

    except Exception as e:
        return jsonify({
            "ok": False,
            "error": str(e)
        }), 500


@app.get("/me")
def me():
    email = session.get("user_email")

    if not email:
        return jsonify({
            "ok": False,
            "user": None
        })

    return jsonify({
        "ok": True,
        "user": {
            "email": email
        }
    })


@app.post("/logout")
def logout():
    session.clear()

    return jsonify({
        "ok": True,
        "message": "Выход выполнен"
    })


if __name__ == "__main__":
    app.run(debug=True)