it0/packages/services/billing-service/src/billing.module.ts

109 lines
4.5 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ScheduleModule } from '@nestjs/schedule';
import { DatabaseModule } from '@it0/database';
// Domain Entities
import { Plan } from './domain/entities/plan.entity';
import { Subscription } from './domain/entities/subscription.entity';
import { Invoice } from './domain/entities/invoice.entity';
import { InvoiceItem } from './domain/entities/invoice-item.entity';
import { Payment } from './domain/entities/payment.entity';
import { PaymentMethod } from './domain/entities/payment-method.entity';
import { UsageAggregate } from './domain/entities/usage-aggregate.entity';
// Domain Services
import { OverageCalculatorService } from './domain/services/overage-calculator.service';
import { SubscriptionLifecycleService } from './domain/services/subscription-lifecycle.service';
import { InvoiceGeneratorService } from './domain/services/invoice-generator.service';
// Infrastructure Repositories
import { PlanRepository } from './infrastructure/repositories/plan.repository';
import { SubscriptionRepository } from './infrastructure/repositories/subscription.repository';
import { InvoiceRepository } from './infrastructure/repositories/invoice.repository';
import { PaymentRepository } from './infrastructure/repositories/payment.repository';
import { UsageAggregateRepository } from './infrastructure/repositories/usage-aggregate.repository';
// Payment Providers
import { PaymentProviderRegistry } from './infrastructure/payment-providers/payment-provider.registry';
import { StripeProvider } from './infrastructure/payment-providers/stripe/stripe.provider';
import { AlipayProvider } from './infrastructure/payment-providers/alipay/alipay.provider';
import { WeChatPayProvider } from './infrastructure/payment-providers/wechat/wechat-pay.provider';
import { CryptoProvider } from './infrastructure/payment-providers/crypto/crypto.provider';
// Application Use Cases
import { CreateSubscriptionUseCase } from './application/use-cases/create-subscription.use-case';
import { ChangePlanUseCase } from './application/use-cases/change-plan.use-case';
import { CancelSubscriptionUseCase } from './application/use-cases/cancel-subscription.use-case';
import { GenerateMonthlyInvoiceUseCase } from './application/use-cases/generate-monthly-invoice.use-case';
import { AggregateUsageUseCase } from './application/use-cases/aggregate-usage.use-case';
import { CheckTokenQuotaUseCase } from './application/use-cases/check-token-quota.use-case';
import { CreatePaymentSessionUseCase } from './application/use-cases/create-payment-session.use-case';
import { HandlePaymentWebhookUseCase } from './application/use-cases/handle-payment-webhook.use-case';
// Controllers
import { PlanController } from './interfaces/rest/controllers/plan.controller';
import { SubscriptionController } from './interfaces/rest/controllers/subscription.controller';
import { InvoiceController } from './interfaces/rest/controllers/invoice.controller';
import { PaymentMethodController } from './interfaces/rest/controllers/payment-method.controller';
import { WebhookController } from './interfaces/rest/controllers/webhook.controller';
// Cron scheduler
import { BillingScheduler } from './infrastructure/scheduler/billing.scheduler';
import { PlanSeedService } from './infrastructure/seed/plan-seed.service';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
DatabaseModule.forRoot(),
TypeOrmModule.forFeature([
Plan, Subscription, Invoice, InvoiceItem,
Payment, PaymentMethod, UsageAggregate,
]),
ScheduleModule.forRoot(),
],
controllers: [
PlanController,
SubscriptionController,
InvoiceController,
PaymentMethodController,
WebhookController,
],
providers: [
// Domain services
OverageCalculatorService,
SubscriptionLifecycleService,
InvoiceGeneratorService,
// Repositories
PlanRepository,
SubscriptionRepository,
InvoiceRepository,
PaymentRepository,
UsageAggregateRepository,
// Payment providers
StripeProvider,
AlipayProvider,
WeChatPayProvider,
CryptoProvider,
PaymentProviderRegistry,
// Use cases
CreateSubscriptionUseCase,
ChangePlanUseCase,
CancelSubscriptionUseCase,
GenerateMonthlyInvoiceUseCase,
AggregateUsageUseCase,
CheckTokenQuotaUseCase,
CreatePaymentSessionUseCase,
HandlePaymentWebhookUseCase,
// Scheduler
BillingScheduler,
PlanSeedService,
],
})
export class BillingModule {}