diff --git a/app/dashboard/templates/dashboard/billing.html b/app/dashboard/templates/dashboard/billing.html index 0dfc3a72..a18af7e3 100644 --- a/app/dashboard/templates/dashboard/billing.html +++ b/app/dashboard/templates/dashboard/billing.html @@ -45,11 +45,35 @@
Don't want to protect your inbox anymore?
- Cancel subscription 😔 + +
+ + + + Cancel subscription + +
+
{% endif %} +{% endblock %} +{% block script %} + {% endblock %} \ No newline at end of file diff --git a/app/dashboard/views/billing.py b/app/dashboard/views/billing.py index 0648be24..2e0d5272 100644 --- a/app/dashboard/views/billing.py +++ b/app/dashboard/views/billing.py @@ -1,17 +1,38 @@ -from flask import render_template, flash, redirect, url_for +from flask import render_template, flash, redirect, url_for, request from flask_login import login_required, current_user from app.dashboard.base import dashboard_bp +from app.log import LOG +from app.models import Subscription +from app.extensions import db +from app.paddle_utils import cancel_subscription @dashboard_bp.route("/billing", methods=["GET", "POST"]) @login_required def billing(): # sanity check: make sure this page is only for user who has paddle subscription - sub = current_user.get_subscription() + sub: Subscription = current_user.get_subscription() if not sub: flash("You don't have any active subscription", "warning") return redirect(url_for("dashboard.index")) + if request.method == "POST": + if request.form.get("form-name") == "cancel": + LOG.error(f"User {current_user} cancels their subscription") + success = cancel_subscription(sub.subscription_id) + + if success: + sub.cancelled = True + db.session.commit() + flash("Your subscription has been canceled successfully", "success") + else: + flash( + "Something went wrong, sorry for the inconvenience. Please retry. We are already notified and will be on it asap", + "error", + ) + + return redirect(url_for("dashboard.billing")) + return render_template("dashboard/billing.html", sub=sub)