Skip to content

Instantly share code, notes, and snippets.

@denoww
Last active July 2, 2016 20:18
Show Gist options
  • Save denoww/2343a153e3a65e6daf3c9d1db1b69982 to your computer and use it in GitHub Desktop.
Save denoww/2343a153e3a65e6daf3c9d1db1b69982 to your computer and use it in GitHub Desktop.

Repensando Repetições

Problemas da abordagem atual

Cobranca.do_cliente(1).simular_repeticoes

O chamado acima irá buscar todas cobranças do cliente 1 e quando chamar simular repetições , o postgres irá simular cobranças de TODOS OS CLIENTES. Portanto Teremos um problema muito sério de performance em um futuro muito próximo

Outro problema é que o filtro avançado não funciona . Se usuário filtrar no avançado por tipo de data created_at não vai fucionar, pois a função do postgres só trabalha com vencimento

A boa notícia é que tem SOLUÇÃO e está descrita abaixo.

Preparação

inicio e fim devem ser OBRIGATÓRIOS

Validar inicio e fim

  • no front

    Tirar "MOSTRAR TODOS" do period picker

    Validar inicio e fim - front deve obrigar usuário a informar inicio e fim (filtro avançado)

  • no back

fail "Faltando inicio e fim nos parametros de busca" unless inicio && fim

Repensar simular_repeticoes

simular_repeticoes deve suportar vencimento e created_at que são enviados pelo filtro do front

Repensando

scope :buscar
  scoped = all
  input_date = filtro[:input_date].presence # created_at etc - o que vier do filtro do front

  ...
  # realizar as busca avançado/simples normalmente
  ...

  molde_ids = scoped.moldes_repeticoes.select(:id).map(&:id) # moldes_repeticoes já existe no grooming
  if molde_ids.any?
    # O front sempre vai enviar o inicio e o fim
    scoped = scoped.simular_repeticoes(molde_ids, input_date, inicio, fim)
  end

  return scoped.uniq
end

Na prática

Cobranca.buscar({input_date: 'vencimento', inicio: junho, fim: julho}).paginate(page: 1, per_page: 15)
Cobranca.buscar({q: '#24', input_date: 'vencimento', inicio: junho, fim: julho}) # o front tem que enviar uma data

Analisar se faz sentido estes parâmetros

Atualizar Funções e Views do PG para os novos parâmetros

simular_repeticoes(molde_ids, input_date, inicio, fim)

Adeus slash_ghost

Remover qualquer lógica relacionada slash_ghost no Rails e Postgres pois agora simulamos repetições em cima dos moldes encontrados pelo scope :buscar

Happy coding

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment