Tracking analytics — códigos de rastreio em organização e produto

TLDR: associar códigos de rastreio a Organization e Product por meio de uma associação polimórfica, gerenciável pelo ActiveAdmin e exposta na API.

Contexto

Não há onde guardar pixels e códigos de rastreio de terceiros. Cada organização e cada produto pode precisar dos seus, e o checkout precisa devolvê-los para o frontend injetar.

Objetivos

  • Implementar um modelo polimórfico Trackable associando códigos de rastreio a Organization e Product.
  • Oferecer interface de gerenciamento no ActiveAdmin.
  • Expor a informação de rastreio nas APIs V1 e V2.

Fora de escopo

— (não registrado na spec original)

Mudanças

Banco de dados

Criar a tabela trackables:

  • Campos: tracking_name (string), tracking_value (string), active (boolean)
  • Campos da associação polimórfica: trackable_id, trackable_type

Modelos

  • Trackable — belongs_to :trackable, polymorphic: true
  • Organization e Product — has_many :trackables, as: :trackable

ActiveAdmin

Interfaces de gerenciamento de trackables nos dashboards de Organization e Product.

API

  • Atualizar CheckoutController e CheckoutsController para incluir os trackables nas respostas.
  • Modificar os serializers para incluir a informação de trackable tanto de Organization quanto de Product.

Roadmap

  • [x] Criar o arquivo de RFC
  • [x] Implementar as migrations e os modelos
  • [x] Escrever as specs de modelo
  • [x] Atualizar os controllers
  • [x] Escrever as specs de controller
  • [x] Testar e fazer o deploy

Como verificar

  • RSpec com shoulda-matchers para os testes de modelo e de controller.
  • Garantir que todos os testes passam antes de commitar, respeitando as regras do RuboCop.

Documentação

Implementação: app/models/trackable.rb, app/admin/, app/controllers/api/v1/checkout_controller.rb. A resposta do checkout expõe active_trackables em product e em organization.