update subscription algorithm

This commit is contained in:
root
2026-05-25 03:12:19 -04:00
parent 95376d3223
commit c9cbe479aa
42 changed files with 3098 additions and 307 deletions
@@ -57,6 +57,10 @@ const SUB_STATUS_COLORS: Record<string, string> = {
ACTIVE: 'text-emerald-400 bg-emerald-900/30',
TRIALING: 'text-sky-400 bg-sky-900/30',
PAST_DUE: 'text-orange-400 bg-orange-900/30',
PAYMENT_PENDING: 'text-yellow-400 bg-yellow-900/30',
SUSPENDED: 'text-red-400 bg-red-900/30',
EXPIRED: 'text-zinc-400 bg-zinc-800',
PAUSED: 'text-purple-400 bg-purple-900/30',
CANCELLED: 'text-zinc-400 bg-zinc-800',
UNPAID: 'text-red-400 bg-red-900/30',
}
@@ -75,7 +79,7 @@ const PLAN_COLORS: Record<string, string> = {
}
function fmt(amount: number, currency: string) {
return `${(amount / 100).toFixed(2)} ${currency}`
return `${amount.toFixed(2)} ${currency}`
}
function fmtDate(iso: string | null) {
@@ -221,8 +225,8 @@ export default function AdminBillingPage() {
})
const json = await res.json()
if (!res.ok) throw new Error(json?.message ?? 'Failed to fetch')
setSubscriptions(json.data ?? [])
setStats(json.stats ?? null)
setSubscriptions(json.data?.data ?? [])
setStats(json.data?.stats ?? null)
} catch (err: any) {
setError(err.message)
} finally {
@@ -263,7 +267,7 @@ export default function AdminBillingPage() {
})
const json = await res.json()
if (!res.ok) throw new Error(json?.message ?? `Error ${res.status}`)
setInvoices(json.data ?? [])
setInvoices(json.data?.data ?? [])
} catch (err: any) {
setInvoicesError(err.message)
} finally {
@@ -290,7 +294,7 @@ export default function AdminBillingPage() {
<div className="grid grid-cols-2 gap-4 sm:grid-cols-5">
<div className="col-span-2 sm:col-span-1 panel p-4">
<p className="text-xs text-zinc-500 uppercase tracking-wider">{copy.mrr}</p>
<p className="mt-1 text-2xl font-bold text-emerald-400">{(stats.mrr / 100).toFixed(0)}</p>
<p className="mt-1 text-2xl font-bold text-emerald-400">{stats.mrr.toFixed(0)}</p>
</div>
<div className="panel p-4">
<p className="text-xs text-zinc-500 uppercase tracking-wider">{copy.active}</p>