Skip to content

Commit

Permalink
implement dynamic price service
Browse files Browse the repository at this point in the history
  • Loading branch information
nudded committed Sep 23, 2024
1 parent 1d00faf commit b9324ba
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 2 deletions.
8 changes: 8 additions & 0 deletions app/services/billable_metrics/aggregations/base_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ def aggregate(options: {})
else
compute_aggregation(options:)
end
if charge.dynamic?
compute_precise_total_amount_cents(options:)
end
result
end

def compute_aggregation(options: {})
Expand All @@ -36,6 +40,10 @@ def compute_grouped_by_aggregation(options: {})
raise NotImplementedError
end

def compute_precise_total_amount_cents(options: {})
raise NotImplementedError
end

def per_event_aggregation(exclude_event: false)
Result.new.tap do |result|
result.event_aggregation = compute_per_event_aggregation(exclude_event:)
Expand Down
6 changes: 5 additions & 1 deletion app/services/billable_metrics/aggregations/sum_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module BillableMetrics
module Aggregations
class SumService < BillableMetrics::Aggregations::BaseService
def initialize(...)
super(...)
super

event_store.numeric_property = true
event_store.aggregation_property = billable_metric.field_name
Expand Down Expand Up @@ -64,6 +64,10 @@ def compute_grouped_by_aggregation(options: {})
result.service_failure!(code: 'aggregation_failure', message: e.message)
end

def compute_precise_total_amount_cents(options: {})
result.precise_total_amount_cents = event_store.sum_precise_total_amount_cents
end

# NOTE: Return cumulative sum of field_name based on the number of free units
# (per_events or per_total_aggregation).
def running_total(options)
Expand Down
2 changes: 1 addition & 1 deletion app/services/charges/charge_models/dynamic_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class DynamicService < Charges::ChargeModels::BaseService
protected

def compute_amount
(units * BigDecimal(properties['amount']))
aggregation_result.precise_total_amount_cents
end

def unit_amount
Expand Down
4 changes: 4 additions & 0 deletions app/services/events/stores/postgres_store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ def grouped_last
prepare_grouped_result(Event.connection.select_all(sql).rows)
end

def sum_precise_total_amount_cents
events.sum(:precise_total_amount_cents)
end

def sum
events.sum("(#{sanitized_property_name})::numeric")
end
Expand Down

0 comments on commit b9324ba

Please sign in to comment.