diff --git a/lib/trust_level.rb b/lib/trust_level.rb index 285850ff77dd2e9722f4f669be469a5cdeaeafc0..c70edeb92de07261af31ee26a308c5f477705f46 100644 --- a/lib/trust_level.rb +++ b/lib/trust_level.rb @@ -27,6 +27,10 @@ module TrustLevel def support_call?(*) false end + + def send_message?(*) + false + end end class Basement @@ -37,6 +41,10 @@ module TrustLevel def support_call?(rate, concurrency) rate <= 0.02 && concurrency < 1 end + + def send_message?(messages_today) + messages_today < 200 + end end class Paragon @@ -47,6 +55,10 @@ module TrustLevel def support_call?(_, concurrency) concurrency < 10 end + + def send_message?(messages_today) + messages_today < 700 + end end class Customer @@ -70,5 +82,9 @@ module TrustLevel def support_call?(rate, concurrency) rate <= @max_rate && concurrency < 4 end + + def send_message?(messages_today) + messages_today < 500 + end end end diff --git a/sgx_jmp.rb b/sgx_jmp.rb index 2025184bcea69dcf1efc13d9100286060b035a11..3f5766ada233f4a2c8e4b7aa53405e23e7bc3ad0 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -339,8 +339,11 @@ message do |m| .find_by_jid(m.from.stripped).then { |customer| next customer.stanza_from(m) unless billable_message(m) - customer.message_usage((today..today)).then { |usage| - raise OverLimit.new(customer, usage) if usage > 500 + EMPromise.all([ + TrustLevelRepo.new.find(customer), + customer.message_usage((today..today)) + ]).then { |(tl, usage)| + raise OverLimit.new(customer, usage) unless tl.send_message?(usage) }.then do EMPromise.all([ customer.incr_message_usage,