~singpolyma/sgx-jmp

Customer Info

This should allow us, the admins, to query information about a customer
without having to dive in and run a couple redis queries and some
database queries before getting the full picture of who we're talking
to.

It also allows the users to request some data about themselves. Balance and
phone number are already visible in other places, but their expiry is currently
not, and people have been asking about it.
Remove BigDecimal.new

It turns out in newer versions of Ruby this isn't cool anymore.
The new way is BigDecimal(value), which is dumb, but whatever...
Invite Codes is a Result Form

If we don't do this, the ad-hoc bot won't format the table properly.
Update submodule to get trigger for new-user invites
Merge branch 'invite-codes'

* invite-codes:
  Command to list unused invite codes
Command to list unused invite codes

Instructions also provide details about how the program works.
Fix variable reference
Check for going over 500 every time

Don't fill redis with keys for users who did not go over
Check sample against schema in CI
Check config against schema when loading

So we know very quickly why it's not working.
It's never been called customer.id
Bring in line with the key from billing_monthly_cronjob
Customer always has a JID
There might be no customer
Merge branch 'low-balance-auto-top-up'

* low-balance-auto-top-up:
  Some people have exactly 5 who don't need to be told
  On low balance, top-up or notify
  ExpiringLock helper
Some people have exactly 5 who don't need to be told
On low balance, top-up or notify

On start up, check for users with low balance and NOTIFY about them.  LISTEN for
such notifications and process by either sending a low-balance warning message
or else attempting an auto-top-up as configured.

Using NOTIFY/LISTEN because then we can NOTIFY after any INSERT that leaves the
balance too low (using a trigger).  Doing the sync on start-up in case we missed
a NOTIFY during any downtime.  Using the Redis lock to prevent spamming a
low-balance user in case of many restarts or if they have many small
transactions happen in one day.
ExpiringLock helper

For things we want to do only so often, set up a helper to push expiring keys to
Redis and check for them.
Next