diff --git a/packages/analytics/src/Domain/Revenue/RevenueModificationRepositoryInterface.ts b/packages/analytics/src/Domain/Revenue/RevenueModificationRepositoryInterface.ts index c44946459..7c1c580b0 100644 --- a/packages/analytics/src/Domain/Revenue/RevenueModificationRepositoryInterface.ts +++ b/packages/analytics/src/Domain/Revenue/RevenueModificationRepositoryInterface.ts @@ -4,6 +4,6 @@ import { RevenueModification } from './RevenueModification' export interface RevenueModificationRepositoryInterface { findLastByUserUuid(userUuid: Uuid): Promise - sumMRRDiff(dto: { planName?: string; billingFrequency?: number }): Promise + sumMRRDiff(dto: { billingFrequencies: number[]; planNames?: string[] }): Promise save(revenueModification: RevenueModification): Promise } diff --git a/packages/analytics/src/Domain/UseCase/CalculateMonthlyRecurringRevenue/CalculateMonthlyRecurringRevenue.ts b/packages/analytics/src/Domain/UseCase/CalculateMonthlyRecurringRevenue/CalculateMonthlyRecurringRevenue.ts index c0936d088..b0a34a3bf 100644 --- a/packages/analytics/src/Domain/UseCase/CalculateMonthlyRecurringRevenue/CalculateMonthlyRecurringRevenue.ts +++ b/packages/analytics/src/Domain/UseCase/CalculateMonthlyRecurringRevenue/CalculateMonthlyRecurringRevenue.ts @@ -20,7 +20,9 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ) {} async execute(_dto: CalculateMonthlyRecurringRevenueDTO): Promise> { - const mrrDiff = await this.revenueModificationRepository.sumMRRDiff({}) + const mrrDiff = await this.revenueModificationRepository.sumMRRDiff({ + billingFrequencies: [SubscriptionBillingFrequency.Annual, SubscriptionBillingFrequency.Monthly], + }) await this.statisticsStore.setMeasure(StatisticsMeasure.MRR, mrrDiff, [ Period.Today, @@ -29,7 +31,7 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ]) const monthlyPlansMrrDiff = await this.revenueModificationRepository.sumMRRDiff({ - billingFrequency: SubscriptionBillingFrequency.Monthly, + billingFrequencies: [SubscriptionBillingFrequency.Monthly], }) await this.statisticsStore.setMeasure(StatisticsMeasure.MonthlyPlansMRR, monthlyPlansMrrDiff, [ @@ -39,7 +41,7 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ]) const annualPlansMrrDiff = await this.revenueModificationRepository.sumMRRDiff({ - billingFrequency: SubscriptionBillingFrequency.Annual, + billingFrequencies: [SubscriptionBillingFrequency.Annual], }) await this.statisticsStore.setMeasure(StatisticsMeasure.AnnualPlansMRR, annualPlansMrrDiff, [ @@ -49,7 +51,7 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ]) const fiveYearPlansMrrDiff = await this.revenueModificationRepository.sumMRRDiff({ - billingFrequency: SubscriptionBillingFrequency.FiveYear, + billingFrequencies: [SubscriptionBillingFrequency.FiveYear], }) await this.statisticsStore.setMeasure(StatisticsMeasure.FiveYearPlansMRR, fiveYearPlansMrrDiff, [ @@ -59,7 +61,8 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ]) const proPlansMrrDiff = await this.revenueModificationRepository.sumMRRDiff({ - planName: SubscriptionName.ProPlan, + planNames: [SubscriptionName.ProPlan], + billingFrequencies: [SubscriptionBillingFrequency.Annual, SubscriptionBillingFrequency.Monthly], }) await this.statisticsStore.setMeasure(StatisticsMeasure.ProPlansMRR, proPlansMrrDiff, [ @@ -69,7 +72,8 @@ export class CalculateMonthlyRecurringRevenue implements DomainUseCaseInterface< ]) const plusPlansMrrDiff = await this.revenueModificationRepository.sumMRRDiff({ - planName: SubscriptionName.PlusPlan, + planNames: [SubscriptionName.PlusPlan], + billingFrequencies: [SubscriptionBillingFrequency.Annual, SubscriptionBillingFrequency.Monthly], }) await this.statisticsStore.setMeasure(StatisticsMeasure.PlusPlansMRR, plusPlansMrrDiff, [ diff --git a/packages/analytics/src/Infra/MySQL/MySQLRevenueModificationRepository.ts b/packages/analytics/src/Infra/MySQL/MySQLRevenueModificationRepository.ts index f50c8dd4e..68cf67c56 100644 --- a/packages/analytics/src/Infra/MySQL/MySQLRevenueModificationRepository.ts +++ b/packages/analytics/src/Infra/MySQL/MySQLRevenueModificationRepository.ts @@ -16,14 +16,14 @@ export class MySQLRevenueModificationRepository implements RevenueModificationRe private revenueModificationMap: MapInterface, ) {} - async sumMRRDiff(dto: { planName?: string; billingFrequency?: number }): Promise { + async sumMRRDiff(dto: { billingFrequencies: number[]; planNames?: string[] }): Promise { const query = this.ormRepository.createQueryBuilder().select('sum(new_mrr - previous_mrr)', 'mrrDiff') - if (dto.planName !== undefined) { - query.where('subscription_plan = :planName', { planName: dto.planName }) + if (dto.billingFrequencies.length > 0) { + query.where('billing_frequency IN (:...billingFrequencies)', { billingFrequencies: dto.billingFrequencies }) } - if (dto.billingFrequency !== undefined) { - query.where('billing_frequency = :billingFrequency', { billingFrequency: dto.billingFrequency }) + if (dto.planNames && dto.planNames.length > 0) { + query.andWhere('subscription_plan IN (:...planNames)', { planNames: dto.planNames }) } const result = await query.getRawOne()