M lib/customer.rb => lib/customer.rb +7 -0
@@ 53,6 53,13 @@ class Customer
.then(PaymentMethods.method(:for_braintree_customer))
end
+ def unused_invites
+ promise = DB.query_defer(<<~SQL, [customer_id])
+ SELECT code FROM unused_invites WHERE creator_id=$1
+ SQL
+ promise.then { |result| result.map { |row| row["code"] } }
+ end
+
def stanza_to(stanza)
stanza = stanza.dup
stanza.to = jid.with(resource: stanza.to&.resource)
M sgx_jmp.rb => sgx_jmp.rb +24 -0
@@ 498,6 498,30 @@ Command.new(
end
}.register(self).then(&CommandList.method(:register))
+Command.new(
+ "invite codes",
+ "Refer a friend for free credit"
+) {
+ Command.customer.then(&:unused_invites).then do |invites|
+ if invites.empty?
+ Command.finish("You have no more invites right now, try again later.")
+ else
+ Command.finish do |reply|
+ reply.form.title = "Unused Invite Codes"
+ reply.form.instructions =
+ "Each of these codes is single use and gives the person using " \
+ "them a free month of JMP service. You will receive credit " \
+ "equivalent to one month of free service if they later become " \
+ "a paying customer."
+ FormTable.new(
+ invites.map { |i| [i] },
+ code: "Invite Code"
+ ).add_to_form(reply.form)
+ end
+ end
+ end
+}.register(self).then(&CommandList.method(:register))
+
command :execute?, node: "web-register", sessionid: nil do |iq|
StatsD.increment("command", tags: ["node:#{iq.node}"])