Merge branch 'invite-codes'

Stephen Paul Weber created

* invite-codes:
  Command to list unused invite codes

Change summary

lib/customer.rb |  7 +++++++
sgx_jmp.rb      | 24 ++++++++++++++++++++++++
2 files changed, 31 insertions(+)

Detailed changes

lib/customer.rb 🔗

@@ -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)

sgx_jmp.rb 🔗

@@ -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}"])