* feat: add PlatformOrganizationBillingTasker with sync and trigger.dev versions - Create PlatformOrganizationBillingTasker extending Tasker base class - Add sync tasker (PlatformOrganizationBillingSyncTasker) for synchronous execution - Add trigger.dev tasker (PlatformOrganizationBillingTriggerTasker) for async execution - Create trigger.dev task for incrementing subscription usage - Add PlatformOrganizationBillingTaskService with business logic - Add PlatformOrganizationBillingRepository for data access - Add createSubscriptionUsageRecord method to StripeBillingService - Follow BookingEmailAndSmsTasker pattern for consistency Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: move repository methods per PR feedback - Move findPlatformOrgByUserId to OrganizationRepository - Create new PlatformBillingRepository for billing queries - Remove PlatformOrganizationBillingRepository (consolidated) - Update task service and trigger.dev task to use new repositories Co-Authored-By: morgan@cal.com <morgan@cal.com> * feat: add DI using @evyweb/ioctopus for platform billing tasker - Create di/tasker/ directory following BookingEmailAndSmsTasker pattern - Add tokens.ts with DI tokens for all billing tasker classes - Add module files for PlatformBillingRepository, TaskService, SyncTasker, TriggerTasker, Tasker - Add container files with getter functions - Update trigger.dev task to use DI container instead of manual instantiation Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: add select statement to PlatformBillingRepository.findByTeamId Only select subscriptionId field since that's the only field used by the task service Co-Authored-By: morgan@cal.com <morgan@cal.com> * feat: add NestJS DI modules for platform billing tasker in API v2 - Add platform billing tasker exports to platform-libraries/organizations.ts - Export IBillingProviderService type from platform-libraries - Create StripeBillingProviderService wrapper implementing IBillingProviderService - Create PrismaPlatformBillingRepository extending PlatformBillingRepository - Create NestJS service wrappers for all platform billing tasker classes - Create PlatformBillingTaskerModule with all providers and exports - Update PlatformOrganizationBillingTaskService to use Pick<IBillingProviderService> Co-Authored-By: morgan@cal.com <morgan@cal.com> * feat: handle cancel and reschedule usage * fix: restore IsUserInBillingOrg to billing module providers Co-Authored-By: morgan@cal.com <morgan@cal.com> * chore: add idempotency key * fix: just log error] * fix: logger and typo * fix: address Cubic AI review feedback (high confidence issues) - Fix grammar error: 'Delayed task are' -> 'Delayed tasks are' in PlatformOrganizationBillingSyncTasker.ts (3 occurrences) - Re-throw error after logging in increment-usage.ts to enable trigger.dev retry mechanism Co-Authored-By: unknown <> * fix: remove duplicate code and use DI instead * fix: remove orThrow on find first in findPlatformOrgByUserId * refactor: prevent usage increment task from re-throwing errors --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
import { Module, Scope } from "@nestjs/common";
|
|
import { Logger } from "@/lib/logger.bridge";
|
|
import { PrismaPlatformBillingRepository } from "@/lib/repositories/prisma-platform-billing.repository";
|
|
import { StripeBillingProviderService } from "@/lib/services/stripe-billing-provider.service";
|
|
import { PlatformBillingSyncTaskerService } from "@/lib/services/tasker/platform-billing-sync-tasker.service";
|
|
import { PlatformBillingTaskService } from "@/lib/services/tasker/platform-billing-task.service";
|
|
import { PlatformBillingTasker } from "@/lib/services/tasker/platform-billing-tasker.service";
|
|
import { PlatformBillingTriggerTaskerService } from "@/lib/services/tasker/platform-billing-trigger-tasker.service";
|
|
import { OrganizationsModule } from "@/modules/organizations/organizations.module";
|
|
import { PrismaModule } from "@/modules/prisma/prisma.module";
|
|
import { StripeModule } from "@/modules/stripe/stripe.module";
|
|
|
|
@Module({
|
|
imports: [PrismaModule, StripeModule, OrganizationsModule],
|
|
providers: [
|
|
PrismaPlatformBillingRepository,
|
|
StripeBillingProviderService,
|
|
{
|
|
provide: Logger,
|
|
useFactory: () => {
|
|
return new Logger();
|
|
},
|
|
scope: Scope.TRANSIENT,
|
|
},
|
|
PlatformBillingTaskService,
|
|
PlatformBillingSyncTaskerService,
|
|
PlatformBillingTriggerTaskerService,
|
|
PlatformBillingTasker,
|
|
],
|
|
exports: [PlatformBillingTasker],
|
|
})
|
|
export class PlatformBillingTaskerModule {}
|