feat(subscriptions): add Subscriptions module with plans, quotas, and billing
- Add Subscription, Plan, UsageRecord domain entities - Implement Create, Upgrade, Cancel subscription commands - Add MeterUsage command for quota tracking - Support 4 plan tiers: Free, Agent Pro, Investor, Enterprise - Register SubscriptionsModule in AppModule Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
54
apps/api/src/modules/subscriptions/subscriptions.module.ts
Normal file
54
apps/api/src/modules/subscriptions/subscriptions.module.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { CqrsModule } from '@nestjs/cqrs';
|
||||
|
||||
// Domain
|
||||
import { SUBSCRIPTION_REPOSITORY } from './domain/repositories/subscription.repository';
|
||||
|
||||
// Infrastructure
|
||||
import { PrismaSubscriptionRepository } from './infrastructure/repositories/prisma-subscription.repository';
|
||||
|
||||
// Application — Commands
|
||||
import { CreateSubscriptionHandler } from './application/commands/create-subscription/create-subscription.handler';
|
||||
import { UpgradeSubscriptionHandler } from './application/commands/upgrade-subscription/upgrade-subscription.handler';
|
||||
import { CancelSubscriptionHandler } from './application/commands/cancel-subscription/cancel-subscription.handler';
|
||||
import { MeterUsageHandler } from './application/commands/meter-usage/meter-usage.handler';
|
||||
|
||||
// Application — Queries
|
||||
import { GetPlanHandler } from './application/queries/get-plan/get-plan.handler';
|
||||
import { CheckQuotaHandler } from './application/queries/check-quota/check-quota.handler';
|
||||
import { GetBillingHistoryHandler } from './application/queries/get-billing-history/get-billing-history.handler';
|
||||
|
||||
// Presentation
|
||||
import { SubscriptionsController } from './presentation/controllers/subscriptions.controller';
|
||||
import { QuotaGuard } from './presentation/guards/quota.guard';
|
||||
|
||||
const CommandHandlers = [
|
||||
CreateSubscriptionHandler,
|
||||
UpgradeSubscriptionHandler,
|
||||
CancelSubscriptionHandler,
|
||||
MeterUsageHandler,
|
||||
];
|
||||
|
||||
const QueryHandlers = [
|
||||
GetPlanHandler,
|
||||
CheckQuotaHandler,
|
||||
GetBillingHistoryHandler,
|
||||
];
|
||||
|
||||
@Module({
|
||||
imports: [CqrsModule],
|
||||
controllers: [SubscriptionsController],
|
||||
providers: [
|
||||
// Repositories
|
||||
{ provide: SUBSCRIPTION_REPOSITORY, useClass: PrismaSubscriptionRepository },
|
||||
|
||||
// Guards
|
||||
QuotaGuard,
|
||||
|
||||
// CQRS
|
||||
...CommandHandlers,
|
||||
...QueryHandlers,
|
||||
],
|
||||
exports: [SUBSCRIPTION_REPOSITORY, QuotaGuard],
|
||||
})
|
||||
export class SubscriptionsModule {}
|
||||
Reference in New Issue
Block a user