docbrown/app/queries/consumer_apps/rpush_app_query.rb
Fernando Valverde 6e6c32e92a
Fixes a name conflict in Rpush models (#15978)
* Fixes a name conflict in Rpush models

* Removes unnecessary operator

* Review feedback
2022-01-07 09:38:16 -06:00

59 lines
1.6 KiB
Ruby

module ConsumerApps
class RpushAppQuery
def self.call(app_bundle:, platform:)
new(app_bundle: app_bundle, platform: platform).call
end
def initialize(app_bundle:, platform:)
@app_bundle = app_bundle
@platform = platform
@app_name = "#{app_bundle}.#{platform}"
@consumer_app = ConsumerApps::FindOrCreateByQuery.call(
app_bundle: @app_bundle,
platform: @platform,
)
end
def call
if consumer_app.android?
android_app = Rpush::Gcm::App.where(name: app_name).first
android_app || recreate_android_app!
elsif consumer_app.ios?
ios_app = Rpush::Apns2::App.where(name: app_name).first
ios_app || recreate_ios_app!
end
end
private
attr_reader :app_bundle, :app_name, :consumer_app, :platform
def recreate_ios_app!
# If the ConsumerApp doesn't have credentials there's no need to create it
return if consumer_app.auth_credentials.blank?
app = Rpush::Apns2::App.new
app.name = app_name
app.certificate = consumer_app.auth_credentials.to_s.gsub("\\n", "\n")
app.environment = Rails.env
app.password = ""
app.bundle_id = app_bundle
app.connections = 1
app.save!
app
end
def recreate_android_app!
# If the ConsumerApp doesn't have credentials there's no need to create it
return if consumer_app.auth_credentials.blank?
app = Rpush::Gcm::App.new
app.name = app_name
app.auth_key = consumer_app.auth_credentials.to_s
app.connections = 1
app.save!
app
end
end
end