Fase 4 — Billing & Admin Panel
- Get link
- X
- Other Apps
Fase 4 — Billing & Admin Panel ✅
Backend (backend/)
New files:
- backend/src/lib/midtrans.ts — Midtrans Snap API helper (
createSnapToken,verifyMidtransSignature) - backend/src/routes/billing.ts — tenant billing routes:
GET /billing/subscriptions— per-outlet subscription statusGET /billing/invoices— invoice historyPOST /billing/invoices/:id/snap— creates Midtrans Snap token, records pending payment rowPOST /billing/midtrans/notify— webhook: verifies signature, marks invoice paid, extends subscription period
- backend/src/routes/admin.ts —
saas_owner-only routes:GET /admin/dashboard— MRR, active/trialing/past_due counts, unpaid invoicesGET /admin/tenants— paginated tenant list with subscription summaryGET /admin/tenants/:id— tenant detail with outlets, subscriptions, invoicesPOST /admin/tenants/:id/extend— manual 1-month extension (marks any pending invoice paid)POST /admin/invoices/generate— generates invoices for subscriptions expiring within 7 days
Modified:
- backend/src/db/schema.ts — added
subscriptionInvoicesandsubscriptionPaymentsDrizzle tables - backend/src/index.ts — registered all new routes
- backend/.env.example — added
MIDTRANS_SERVER_KEY/MIDTRANS_IS_PRODUCTION
Web (web/)
New files:
- web/layouts/admin.vue — dark sidebar admin layout
- web/middleware/admin.ts — redirects non-saas_owner to
/admin/login - web/pages/admin/login.vue — internal admin login (hidden URL)
- web/pages/admin/index.vue — dashboard: MRR, counts, "Generate Invoice" button
- web/pages/admin/tenants.vue — paginated tenant table
- web/pages/admin/tenants/[id].vue — tenant detail + "Perpanjang +1 Bulan" per outlet
Modified:
- web/pages/tenant/billing.vue — real invoice list, "Bayar via Midtrans" button with Snap popup
- web/composables/useAuth.ts — added
loginSaas() - web/nuxt.config.ts — added
midtransClientKey+midtransIsProductionpublic config - web/.env.example — Midtrans client key vars
Setup sebelum testing Midtrans
- Daftar di dashboard.sandbox.midtrans.com
- Ambil Server Key → isi
MIDTRANS_SERVER_KEYdibackend/.env - Ambil Client Key → isi
NUXT_PUBLIC_MIDTRANS_CLIENT_KEYdiweb/.env - Di Midtrans dashboard, set Payment Notification URL ke
http://your-domain/billing/midtrans/notify
- Get link
- X
- Other Apps
Comments
Post a Comment