109 lines
4.5 KiB
TypeScript
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 {}
|