Tracking analytics — códigos de rastreio em organização e produto
TLDR: associar códigos de rastreio a
OrganizationeProductpor 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
Trackableassociando códigos de rastreio aOrganizationeProduct. - 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: trueOrganizationeProduct—has_many :trackables, as: :trackable
ActiveAdmin
Interfaces de gerenciamento de trackables nos dashboards de Organization e Product.
API
- Atualizar
CheckoutControllereCheckoutsControllerpara incluir os trackables nas respostas. - Modificar os serializers para incluir a informação de trackable tanto de
Organizationquanto deProduct.
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
RSpeccomshoulda-matcherspara 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.