diff --git a/bin/generate_promo_codes b/bin/generate_promo_codes new file mode 100755 index 0000000000000000000000000000000000000000..4b8ba7336cab83c5e1546f120fb6faa6a607c6f5 --- /dev/null +++ b/bin/generate_promo_codes @@ -0,0 +1,66 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "pg/em/connection_pool" +require "eventmachine" +require "em_promise" +require "em-hiredis" +require "csv" +require "optparse" + +options = { + count: 10, + creator_id: "86812532466", # one of Denver's JMP accounts + output: "promo_codes.csv" +} + +OptionParser.new do |opts| + opts.banner = "Usage: generate_promo_codes [-c COUNT] [-i ID] [-o FILE]" + + opts.on("-c", "--count N", Integer, "Number of codes to generate (default: 10)") do |v| + options[:count] = v + end + + opts.on("-i", "--creator-id ID", "Creator ID for codes (default: one of Denver's)") do |v| + options[:creator_id] = v + end + + opts.on("-o", "--output FILE", "Output CSV file (default: promo_codes.csv)") do |v| + options[:output] = v + end + + opts.on("-h", "--help", "Show this help") do + puts opts + exit + end +end.parse! + +require_relative "../lib/postgres" +require_relative "../lib/invites_repo" + +EM.run do + DB = Postgres.connect(dbname: "jmp") + REDIS = EM::Hiredis.connect + + InvitesRepo.new(DB, REDIS).create_n_codes( + options[:creator_id], + options[:count] + ).then do |codes| + CSV.open(options[:output], "w") do |csv| + csv << ["code"] + codes.each { |code| csv << [code] } + end + + puts "Generated #{codes.length} promo codes" + puts "Saved to: #{options[:output]}" + puts "Creator ID: #{options[:creator_id]}" + puts "\nFirst 5 codes:" + codes.first(5).each { |code| puts " #{code}" } + rescue => e + warn "Error: #{e.message}" + warn e.backtrace.join("\n") + exit 1 + ensure + EM.stop + end +end