Use TrustLevel to determine daily quota

Stephen Paul Weber created

Change summary

lib/trust_level.rb | 16 ++++++++++++++++
sgx_jmp.rb         |  7 +++++--
2 files changed, 21 insertions(+), 2 deletions(-)

Detailed changes

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

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,