Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
85 lines
1.9 KiB
Ruby
85 lines
1.9 KiB
Ruby
class Crm::Leadsquared::Api::BaseClient
|
|
include HTTParty
|
|
|
|
class ApiError < StandardError
|
|
attr_reader :code, :response
|
|
|
|
def initialize(message = nil, code = nil, response = nil)
|
|
@code = code
|
|
@response = response
|
|
super(message)
|
|
end
|
|
end
|
|
|
|
def initialize(access_key, secret_key, endpoint_url)
|
|
@access_key = access_key
|
|
@secret_key = secret_key
|
|
@base_uri = endpoint_url
|
|
end
|
|
|
|
def get(path, params = {})
|
|
full_url = URI.join(@base_uri, path).to_s
|
|
|
|
options = {
|
|
query: params,
|
|
headers: headers
|
|
}
|
|
|
|
response = self.class.get(full_url, options)
|
|
handle_response(response)
|
|
end
|
|
|
|
def post(path, params = {}, body = {})
|
|
full_url = URI.join(@base_uri, path).to_s
|
|
|
|
options = {
|
|
query: params,
|
|
headers: headers
|
|
}
|
|
|
|
options[:body] = body.to_json if body.present?
|
|
|
|
response = self.class.post(full_url, options)
|
|
handle_response(response)
|
|
end
|
|
|
|
private
|
|
|
|
def headers
|
|
{
|
|
'Content-Type': 'application/json',
|
|
'x-LSQ-AccessKey': @access_key,
|
|
'x-LSQ-SecretKey': @secret_key
|
|
}
|
|
end
|
|
|
|
def handle_response(response)
|
|
case response.code
|
|
when 200..299
|
|
handle_success(response)
|
|
else
|
|
error_message = "LeadSquared API error: #{response.code} - #{response.body}"
|
|
Rails.logger.error error_message
|
|
raise ApiError.new(error_message, response.code, response)
|
|
end
|
|
end
|
|
|
|
def handle_success(response)
|
|
parse_response(response)
|
|
rescue JSON::ParserError, TypeError => e
|
|
error_message = "Failed to parse LeadSquared API response: #{e.message}"
|
|
raise ApiError.new(error_message, response.code, response)
|
|
end
|
|
|
|
def parse_response(response)
|
|
body = response.parsed_response
|
|
|
|
if body.is_a?(Hash) && body['Status'] == 'Error'
|
|
error_message = body['ExceptionMessage'] || 'Unknown API error'
|
|
raise ApiError.new(error_message, response.code, response)
|
|
else
|
|
body
|
|
end
|
|
end
|
|
end
|