From bbb92d45e506ed0008fe4b06bf5fa0d3cd634ca7 Mon Sep 17 00:00:00 2001 From: Renato Rosa Date: Wed, 19 Aug 2026 22:02:33 -0300 Subject: [PATCH] Atualizar app/app.py --- app/app.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/app/app.py b/app/app.py index 14b11cf..1f44273 100644 --- a/app/app.py +++ b/app/app.py @@ -56,6 +56,32 @@ def queue_admin_generate(): # DECORATORS # ================ +def require_subscription(f): + @wraps(f) + def wrapper(*args, **kwargs): + db = SessionLocal() + + if app.config["AUTH_MODE"] == "oauth": + email = session["user"]["email"] + else: + email = session["db_user"]["email"] + + user = db.query(User).filter_by(email=email).first() + plan = db.query(Plan).filter_by(id=user.plan_id).first() + sub = db.query(Subscription).filter_by(user_email=email, status="active").first() + + db.close() + + if not sub: + return jsonify({"erro": "Sua assinatura expirou ou não está ativa."}), 402 + + return f(*args, **kwargs) + return wrapper + + + + + import hashlib def make_cache_key(model, prompt): @@ -441,6 +467,47 @@ def legal_links(): # ================ # ADMIN # ================ +@app.route("/admin/plans") +@login_required +@admin_required +def admin_plans(): + db = SessionLocal() + plans = db.query(Plan).all() + db.close() + return jsonify([{ + "id": p.id, + "name": p.name, + "price_monthly": p.price_monthly, + "price_yearly": p.price_yearly, + "priority_queue": p.priority_queue + } for p in plans]) + +@app.route("/admin/plans/create", methods=["POST"]) +@login_required +@admin_required +def admin_create_plan(): + data = request.json + db = SessionLocal() + p = Plan(**data) + db.add(p) + db.commit() + db.close() + return jsonify({"status": "ok"}) + +@app.route("/admin/subscriptions/") +@login_required +@admin_required +def admin_subscriptions(email): + db = SessionLocal() + subs = db.query(Subscription).filter_by(user_email=email).all() + db.close() + return jsonify([{ + "id": s.id, + "plan_id": s.plan_id, + "status": s.status, + "renew_at": s.renew_at.isoformat() + } for s in subs]) + @app.route("/admin/users") @login_required