# This file should ensure the existence of records required to run the application in every environment (production, # development, test). The code here should be idempotent so that it can be executed at any point in every environment. # The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup). puts "🌱 Seeding database..." # Create default admin user puts "\nšŸ‘¤ Creating admin user..." unless AdminUser.exists?(email: "admin@example.com") admin = AdminUser.create!( email: "admin@example.com", password: "password123", name: "Admin User" ) puts "āœ… Created Admin User" puts " Email: admin@example.com" puts " Password: password123" puts " āš ļø IMPORTANT: Change this password in production!" end # Create sample API keys for testing puts "\nšŸ“ Creating API keys..." api_key_results = [] unless ApiKey.exists?(name: "Development API Key") result = ApiKey.generate!( name: "Development API Key", permissions: { "send_sms" => true, "receive_sms" => true, "manage_otp" => true } ) api_key_results << result puts "āœ… Created API Key: #{result[:raw_key]}" end unless ApiKey.exists?(name: "Admin API Key") result = ApiKey.generate!( name: "Admin API Key", permissions: { "send_sms" => true, "receive_sms" => true, "manage_otp" => true, "admin" => true } ) api_key_results << result puts "āœ… Created Admin API Key: #{result[:raw_key]}" end # Create sample gateway devices puts "\nšŸ“± Creating sample gateway devices..." unless Gateway.exists?(device_id: "test-gateway-001") gateway1 = Gateway.new( device_id: "test-gateway-001", name: "Test Gateway 1", status: "offline", priority: 1, active: true ) raw_key = gateway1.generate_api_key! puts "āœ… Created Gateway: #{gateway1.name}" puts " Device ID: #{gateway1.device_id}" puts " API Key: #{raw_key}" end unless Gateway.exists?(device_id: "test-gateway-002") gateway2 = Gateway.new( device_id: "test-gateway-002", name: "Test Gateway 2", status: "offline", priority: 2, active: true ) raw_key = gateway2.generate_api_key! puts "āœ… Created Gateway: #{gateway2.name}" puts " Device ID: #{gateway2.device_id}" puts " API Key: #{raw_key}" end # Create sample webhook configurations puts "\nšŸ”— Creating webhook configurations..." WebhookConfig.find_or_create_by!(name: "SMS Received Webhook") do |w| w.url = "https://example.com/webhooks/sms-received" w.event_type = "sms_received" w.secret_key = SecureRandom.hex(32) w.active = false # Disabled by default w.timeout = 30 w.retry_count = 3 end puts "āœ… Created webhook: SMS Received Webhook" WebhookConfig.find_or_create_by!(name: "SMS Sent Webhook") do |w| w.url = "https://example.com/webhooks/sms-sent" w.event_type = "sms_sent" w.secret_key = SecureRandom.hex(32) w.active = false # Disabled by default w.timeout = 30 w.retry_count = 3 end puts "āœ… Created webhook: SMS Sent Webhook" WebhookConfig.find_or_create_by!(name: "SMS Failed Webhook") do |w| w.url = "https://example.com/webhooks/sms-failed" w.event_type = "sms_failed" w.secret_key = SecureRandom.hex(32) w.active = false # Disabled by default w.timeout = 30 w.retry_count = 3 end puts "āœ… Created webhook: SMS Failed Webhook" puts "\n✨ Seeding completed!" puts "\n" + "=" * 80 puts "šŸ”‘ API KEYS (Save these - they won't be shown again!)" puts "=" * 80 api_key_results.each do |result| puts "\nName: #{result[:api_key].name}" puts "Key: #{result[:raw_key]}" puts "Permissions: #{result[:api_key].permissions}" end puts "\n" + "=" * 80 puts "šŸ“Š Database Summary" puts "=" * 80 puts "Admins: #{AdminUser.count}" puts "Gateways: #{Gateway.count}" puts "API Keys: #{ApiKey.count}" puts "Webhooks: #{WebhookConfig.count}" puts "SMS Messages: #{SmsMessage.count}" puts "OTP Codes: #{OtpCode.count}" puts "=" * 80 puts "\nšŸ” Admin Login" puts "URL: http://localhost:3000/admin/login" puts "Email: admin@example.com" puts "Password: password123" puts "=" * 80