@@ 183,10 183,17 @@ end
EM.error_handler(&method(:panic))
# Infer anything we might have been notified about while we were down
-def catchup_notify(db)
- db.query("SELECT customer_id FROM balances WHERE balance < 5").each do |c|
+def catchup_notify_low_balance(db)
+ db.query(<<~SQL).each do |c|
+ SELECT customer_id
+ FROM balances INNER JOIN customer_plans USING (customer_id)
+ WHERE balance < 5 AND expires_at > LOCALTIMESTAMP
+ SQL
db.query("SELECT pg_notify('low_balance', $1)", c.values)
end
+end
+
+def catchup_notify_possible_renewal
db.query(<<~SQL).each do |c|
SELECT customer_id
FROM customer_plans INNER JOIN balances USING (customer_id)
@@ 227,7 234,8 @@ when_ready do
DB.hold do |conn|
conn.query("LISTEN low_balance")
conn.query("LISTEN possible_renewal")
- catchup_notify(conn)
+ catchup_notify_low_balance(conn)
+ catchup_notify_possible_renewal(conn)
poll_for_notify(conn)
end