* 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>
* add new endpoint to cancel user subscription
* remove comments
* add delete button to frontend
* update correct request method
* fixup
* frontend for cancelling subscription
* better warning message
* better function name
* update locales
* better error handling in case stripe api call fails
* rename teamId to organizationId
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* modules for platform plans and billing pages
* add platform billing and plans related pages
* update platform navigation to include billing tab
* custom hook to upgrade team subscription
* refactors
* export cta row component
* fixup
* only pass in subscription id instead of whole subscription
* refactor :teamId/subscribe endpoint logic, add endpoint for upgrading stripe and shift all webhooks logic into services
* refactor team subscription logic, add logic for upgrading stripe and webhooks logic from billing controller
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* feat: API v2 subversioning
* Update app.ts
* Added multiple versions to existing controllers
* Updated the slots controller
* chore: version platform library package with npm package alias
* chore: use consts to version
* chore: use consts to version
* chore: version api for cal provider
* chore: remove timezone controller subversion poc
* fixup! Merge branch 'main' into feat/api-v2-subversioning
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* chore: Billing Service
* chore: others
* chore: don't type
* chore: typo
* chore: use proper wh secret
* chore: updates
* chore: lockfile
* chore: docs and comment out
* chore: updates and include plan
* chore: config
* chore: bring back alias
* chore: update lockfile
* chore: refactor
* chore: default none plan in db
* chore: read from env vars
* chore: feedback
* chore: remove json config
* chore: proper type