Dois bugs que faziam o cohort retornar 500 e a página de Retenção mostrar "Falha ao carregar cohort": 1. `Captain::AssistantPolicy` não tinha `cohort?` → Pundit batia em NoMethodError no `check_authorization`. Adicionado como leitura pública da assistente, igual `show?`/`playground?`. 2. `RetentionCohortService#cohort_activity` chamava `exec_query(sql, name, [@account.id])` passando array de valores onde a API espera bind objects. A SQL ainda interpolava `account_id = $1` direto na string (sem placeholder ligado). Migrado pra `ActiveRecord::Base.sanitize_sql_array` com `?`, igual ao resto da base. Mantém parametrização e remove acoplamento com posicional. Validado em prod via hot-patch (USR2): GET retention/cohort agora 200 com 3 cohorts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
449 B
Ruby
42 lines
449 B
Ruby
class Captain::AssistantPolicy < ApplicationPolicy
|
|
def index?
|
|
true
|
|
end
|
|
|
|
def show?
|
|
true
|
|
end
|
|
|
|
def tools?
|
|
@account_user.administrator?
|
|
end
|
|
|
|
def create?
|
|
@account_user.administrator?
|
|
end
|
|
|
|
def update?
|
|
@account_user.administrator?
|
|
end
|
|
|
|
def destroy?
|
|
@account_user.administrator?
|
|
end
|
|
|
|
def playground?
|
|
true
|
|
end
|
|
|
|
def pix?
|
|
true
|
|
end
|
|
|
|
def revenue?
|
|
true
|
|
end
|
|
|
|
def cohort?
|
|
true
|
|
end
|
|
end
|