* feat: add BillingCacheService with 1-hour TTL for team subscription data - Create BillingCacheService following CalendarsCacheService pattern - Use teamId-based cache keys with 1-hour TTL (3,600,000 ms) - Integrate caching into getBillingData method in BillingService - Add cache invalidation to all webhook handlers: - handleStripeSubscriptionDeleted - handleStripePaymentSuccess - handleStripePaymentFailed - handleStripePaymentPastDue - handleStripeCheckoutEvents - Add cache invalidation to cancelTeamSubscription method - Add RedisModule import to billing module - Add BillingCacheService to billing module providers - Add findTeamByPlatformBillingId method to OrganizationsRepository for cache invalidation Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: implement BillingServiceCachingProxy pattern - Extract IBillingService interface with all public methods - Create BillingServiceCachingProxy that implements caching logic - Remove all caching logic from original BillingService - Simplify cache invalidation using billing.id = team.id - Update module to use proxy with proper dependency injection - Update controller to inject proxy interface - Remove unused BillingService import from controller This follows the proxy pattern requested in PR feedback, separating caching concerns from core billing logic for better maintainability. Co-Authored-By: morgan@cal.com <morgan@cal.com> * chore: add e2e for billing check * chore: eslint rule for blocking importing features from appstore, lib, prisma (#23832) * eslint rule * improve * fix * improve msg * chore: fix any types set by devin * fix: add mising expect in test * refactor: move cache methods into BillingServiceCachingProxy - Remove BillingCacheService abstraction as suggested by @keithwillcode - Move cache methods directly into proxy as private methods - Update proxy to inject RedisService directly - Move BillingData type to interface for better type safety - Remove BillingCacheService from module providers - Delete unused billing-cache.service.ts file This simplifies the architecture by removing unnecessary abstraction and follows standard caching proxy patterns. Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: test and legacy starter --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: morgan@cal.com <morgan@cal.com> Co-authored-by: Benny Joo <sldisek783@gmail.com> Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import { BookingsRepository_2024_08_13 } from "@/ee/bookings/2024-08-13/bookings.repository";
|
|
import { BillingProcessor } from "@/modules/billing/billing.processor";
|
|
import { BillingRepository } from "@/modules/billing/billing.repository";
|
|
import { BillingController } from "@/modules/billing/controllers/billing.controller";
|
|
import { BillingServiceCachingProxy } from "@/modules/billing/services/billing-service-caching-proxy";
|
|
import { BillingConfigService } from "@/modules/billing/services/billing.config.service";
|
|
import { BillingService } from "@/modules/billing/services/billing.service";
|
|
import { ManagedOrganizationsBillingService } from "@/modules/billing/services/managed-organizations.billing.service";
|
|
import { MembershipsModule } from "@/modules/memberships/memberships.module";
|
|
import { OAuthClientRepository } from "@/modules/oauth-clients/oauth-client.repository";
|
|
import { OrganizationsModule } from "@/modules/organizations/organizations.module";
|
|
import { PrismaModule } from "@/modules/prisma/prisma.module";
|
|
import { RedisModule } from "@/modules/redis/redis.module";
|
|
import { StripeModule } from "@/modules/stripe/stripe.module";
|
|
import { UsersModule } from "@/modules/users/users.module";
|
|
import { BullModule } from "@nestjs/bull";
|
|
import { Module } from "@nestjs/common";
|
|
|
|
@Module({
|
|
imports: [
|
|
PrismaModule,
|
|
StripeModule,
|
|
RedisModule,
|
|
MembershipsModule,
|
|
OrganizationsModule,
|
|
BullModule.registerQueue({
|
|
name: "billing",
|
|
limiter: {
|
|
max: 1,
|
|
duration: 1000,
|
|
},
|
|
}),
|
|
UsersModule,
|
|
],
|
|
providers: [
|
|
BillingConfigService,
|
|
BillingService,
|
|
{
|
|
provide: "IBillingService",
|
|
useClass: BillingServiceCachingProxy,
|
|
},
|
|
BillingRepository,
|
|
BillingProcessor,
|
|
ManagedOrganizationsBillingService,
|
|
OAuthClientRepository,
|
|
BookingsRepository_2024_08_13,
|
|
],
|
|
exports: [BillingService, BillingRepository, ManagedOrganizationsBillingService],
|
|
controllers: [BillingController],
|
|
})
|
|
export class BillingModule {}
|