Fix column name mismatch after copier template update

The subscriptions table still had paddle_subscription_id but the new
code references provider_subscription_id.  Renamed the DB column and
updated all queries in billing/routes.py to match.

Also removed unused get_subscription import from dashboard/routes.py.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Deeman
2026-02-19 23:09:12 +01:00
parent 94e8a5e6c3
commit 642b529c4d
2 changed files with 9 additions and 9 deletions

View File

@@ -53,8 +53,8 @@ async def upsert_subscription(
"""Create or update subscription."""
now = datetime.utcnow().isoformat()
customer_col = "paddle_customer_id"
subscription_col = "paddle_subscription_id"
customer_col = "paddle_customer_id" # legacy column, kept for existing rows
subscription_col = "provider_subscription_id"
existing = await fetch_one("SELECT id FROM subscriptions WHERE user_id = ?", (user_id,))
@@ -83,7 +83,7 @@ async def upsert_subscription(
async def get_subscription_by_provider_id(subscription_id: str) -> dict | None:
return await fetch_one(
"SELECT * FROM subscriptions WHERE paddle_subscription_id = ?",
"SELECT * FROM subscriptions WHERE provider_subscription_id = ?",
(subscription_id,)
)
@@ -97,7 +97,7 @@ async def update_subscription_status(provider_subscription_id: str, status: str,
values = list(extra.values())
values.append(provider_subscription_id)
await execute(f"UPDATE subscriptions SET {sets} WHERE paddle_subscription_id = ?", tuple(values))
await execute(f"UPDATE subscriptions SET {sets} WHERE provider_subscription_id = ?", tuple(values))
@@ -197,13 +197,13 @@ async def checkout(plan: str):
async def manage():
"""Redirect to Paddle customer portal."""
sub = await get_subscription(g.user["id"])
if not sub or not sub.get("paddle_subscription_id"):
if not sub or not sub.get("provider_subscription_id"):
await flash("No active subscription found.", "error")
return redirect(url_for("dashboard.settings"))
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://api.paddle.com/subscriptions/{sub['paddle_subscription_id']}",
f"https://api.paddle.com/subscriptions/{sub['provider_subscription_id']}",
headers={"Authorization": f"Bearer {config.PADDLE_API_KEY}"},
)
response.raise_for_status()
@@ -217,10 +217,10 @@ async def manage():
async def cancel():
"""Cancel subscription via Paddle API."""
sub = await get_subscription(g.user["id"])
if sub and sub.get("paddle_subscription_id"):
if sub and sub.get("provider_subscription_id"):
async with httpx.AsyncClient() as client:
await client.post(
f"https://api.paddle.com/subscriptions/{sub['paddle_subscription_id']}/cancel",
f"https://api.paddle.com/subscriptions/{sub['provider_subscription_id']}/cancel",
headers={
"Authorization": f"Bearer {config.PADDLE_API_KEY}",
"Content-Type": "application/json",

View File

@@ -11,7 +11,7 @@ from quart import Blueprint, flash, g, jsonify, redirect, render_template, reque
from .. import analytics
from ..auth.routes import login_required, update_user
from ..billing.routes import get_subscription
from ..core import csrf_protect, execute, fetch_all, fetch_one, soft_delete
# Blueprint with its own template folder