feat(billing): Stripe-backed billing engine (dark-launched)

Add a lazy/guarded Stripe client (boots without keys), Invoice/Payout schemas, per-currency Price.stripePriceIds, and a BillingService deriving partner/platform summaries, invoices and a partner-cut payout ledger. Partner and operator billing controllers plus a signature-verified Stripe webhook (Fastify raw body). Frontend: partner and operator billing pages and the operator tenant billing/audit tabs on real data. Gated behind new_billing_engine and BILLING_STRIPE_ENABLED; live money paths stay off until keys are set.
This commit is contained in:
Ronni Baslund
2026-05-30 08:03:23 +02:00
parent 6370e392cc
commit 0e1d2fb0d1
23 changed files with 1064 additions and 143 deletions
@@ -0,0 +1,34 @@
import { Module } from '@nestjs/common'
import { MongooseModule } from '@nestjs/mongoose'
import { AuditModule } from '../audit/audit.module.js'
import { AuthModule } from '../auth/auth.module.js'
import { IntegrationsModule } from '../integrations/integrations.module.js'
import { Invoice, InvoiceSchema } from '../schemas/invoice.schema.js'
import { Partner, PartnerSchema } from '../schemas/partner.schema.js'
import { Payout, PayoutSchema } from '../schemas/payout.schema.js'
import { Subscription, SubscriptionSchema } from '../schemas/subscription.schema.js'
import { Tenant, TenantSchema } from '../schemas/tenant.schema.js'
import { UsersModule } from '../users/users.module.js'
import { BillingService } from './billing.service.js'
import { OperatorBillingController } from './operator-billing.controller.js'
import { PartnerBillingController } from './partner-billing.controller.js'
import { StripeWebhookController } from './stripe-webhook.controller.js'
@Module({
imports: [
MongooseModule.forFeature([
{ name: Invoice.name, schema: InvoiceSchema },
{ name: Payout.name, schema: PayoutSchema },
{ name: Subscription.name, schema: SubscriptionSchema },
{ name: Partner.name, schema: PartnerSchema },
{ name: Tenant.name, schema: TenantSchema },
]),
AuthModule,
AuditModule,
IntegrationsModule,
UsersModule,
],
controllers: [PartnerBillingController, OperatorBillingController, StripeWebhookController],
providers: [BillingService],
})
export class BillingModule {}