Raccoglie eventi aggregati dietro consenso cookie, senza PII né tracking su admin/regia/live/replay; GA4 resta invariato. Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
894 B
Ruby
36 lines
894 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Analytics
|
|
class EventsController < ActionController::API
|
|
def create
|
|
payload = parse_payload
|
|
result = Analytics::Ingest.new(events: payload, remote_ip: request.remote_ip).call
|
|
|
|
if result.rate_limited
|
|
return head :too_many_requests
|
|
end
|
|
|
|
render json: { accepted: result.accepted, rejected: result.rejected }, status: :accepted
|
|
end
|
|
|
|
private
|
|
|
|
def parse_payload
|
|
body = request.request_parameters
|
|
return body["events"] if body.is_a?(Hash) && body["events"].is_a?(Array)
|
|
return body if body.is_a?(Array)
|
|
|
|
raw = request.raw_post
|
|
return [] if raw.blank?
|
|
|
|
parsed = JSON.parse(raw)
|
|
return parsed["events"] if parsed.is_a?(Hash) && parsed["events"].is_a?(Array)
|
|
return parsed if parsed.is_a?(Array)
|
|
|
|
[]
|
|
rescue JSON::ParserError
|
|
[]
|
|
end
|
|
end
|
|
end
|