lib/wolf_core/application/application_service.rb
module WolfCore class ApplicationService include WolfCore::ExceptionOperations include WolfCore::HttpOperations def call process rescue => e if e.instance_of?(WolfCore::ServiceException) return Result.failure( error: e.error.to_h.merge({ backtrace: e.backtrace }) ) end # Honeybadger.notify(e) return Result.failure(error: { message: e.message, backtrace: e.backtrace }) end def process raise NotImplementedError end def raise_failed_result(result) return if result.success? raise_service_error(result.error.to_h) end def validate_presence(object, message) return if object.present? raise_service_error({ message: message }) end def remove_non_permitted_parameters(params, allowed_params) permitted = params.slice(*allowed_params) if permitted.blank? raise_service_error({ message: "There are not permitted parameters"}) end return permitted end def barton_integration_http_post(path:, body:, error_message:) domain_url = ENV['CURRENT_SAM_URL'] response = http_post(url: "#{domain_url}/#{path}", body: body) validate_http_response( response: response, message: error_message, error_data: { url: path } ) response end def get_salesforce_access_token result = WolfCore::SalesforceOauthService.new.call raise_failed_result(result) result.data.access_token end def get_salesforce_foreign_object(record_id:) foreign_object = salesforce_http_get( query: { calltype: 'getRecord', RecordId: record_id } ) puts "foreign object is" pp foreign_object foreign_object end def salesforce_http_get(query: nil) response = http_get( url: ENV['SALESFORCE_URL'], headers: { 'Authorization' => "Bearer #{@salesforce_access_token}" }, query: query ) validate_salesforce_response(response) JSON.parse(response.parsed_response) end def validate_salesforce_response(response) return if response.code == 200 message = JSON.parse(response.body).first['message'] raise_service_error({ message: message }) end def get_wolf_token response = http_post( query: { tenant: ENV['TENANT'] }, url: "#{ENV['WOLF_PLATFORM_URL']}/api/v1/sign_in", body: { email: ENV['WOLF_ADMIN_EMAIL'], password: ENV['WOLF_ADMIN_PASSWORD'] } ) validate_http_response( response: response, message: 'Failed to get wolf token' ) response_body = JSON.parse(response.body) wolf_token = response_body.dig('user', 'authentication_token') puts "wolf token is #{wolf_token}" wolf_token end end end