Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.80 KB | None | 0 0
  1. def trazer_marcados(marcados, cards, pagina, max_id = 0)
  2.         m = '(0'
  3.         marcados.each do |i|
  4.             m = m + ', ' + i.to_s
  5.         end
  6.         m = m + ')'
  7.  
  8.  
  9.         marcados.sort!
  10.         array_marcados = "{0"
  11.         marcados.each do |i|
  12.             array_marcados = array_marcados + ',' + i.to_s
  13.         end
  14.         array_marcados = array_marcados + "}"
  15.         array_marcados = array_marcados.gsub "{0,", "{"
  16.  
  17.  
  18.         sql = "select distinct
  19.                    api_spots.id,
  20.                    api_spots.created_at,
  21.                    api_spots.anonima,
  22.                    api_spots.api_usuario_id,
  23.                    ARRAY(
  24.                            select distinct
  25.                            xxu.id
  26.                            from api_usuarios xxu
  27.                            inner join api_marcacoes xxm
  28.                            on xxm.api_usuario_id = xxu.id
  29.                            and xxm.api_spot_id = api_spots.id
  30.                            order by xxu.id
  31.  
  32.                    ) as marcados_ids,
  33.                    ARRAY(
  34.                            select distinct
  35.                            xxu.nome
  36.                            from api_usuarios xxu
  37.                            inner join api_marcacoes xxm
  38.                            on xxm.api_usuario_id = xxu.id
  39.                            and xxm.api_spot_id = api_spots.id
  40.  
  41.                    ) as marcados_nome,
  42.                    (select api_comentarios.comentario from api_comentarios where api_comentarios.api_spot_id = api_spots.id order by api_comentarios.id desc limit 1) as comentario,
  43.                    (select api_usuarios.nome from api_usuarios where api_usuarios.id = api_comentarios.api_usuario_id) as nome,
  44.                    (select count(*) from api_comentarios where api_comentarios.api_spot_id = api_spots.id) as total_comentarios,
  45.                    (select count(*) from api_curtidas where api_curtidas.api_spot_id = api_spots.id) as total_curtidas,
  46.                    (select api_curtidas.id from api_curtidas where api_curtidas.api_spot_id = api_spots.id order by api_curtidas.id DESC limit 1) as ultima_curtida_id,
  47.                    (select ssu.nome from api_usuarios ssu inner join api_curtidas ssc on ssc.api_usuario_id = ssu.id where ssc.id = api_curtidas.id) as nome_curtida,
  48.                    (select 1 from api_curtidas where api_curtidas.api_spot_id = api_spots.id and api_curtidas.api_usuario_id = #{@current_user.id}) as curti
  49.  
  50.                from api_spots
  51.                inner join api_marcacoes  on api_marcacoes.api_spot_id   = api_spots.id
  52.                left join api_comentarios on api_comentarios.api_spot_id = api_spots.id
  53.                left join api_usuarios    on api_usuarios.id             = api_comentarios.api_usuario_id
  54.                left join api_curtidas    on api_curtidas.api_spot_id    = api_spots.id
  55.                where
  56.                    
  57.                    api_marcacoes.api_usuario_id in #{m} and
  58.                    (ARRAY(
  59.                            select distinct
  60.                            xxu.id
  61.                            from api_usuarios xxu
  62.                            inner join api_marcacoes xxm
  63.                            on xxm.api_usuario_id = xxu.id
  64.                            and xxm.api_spot_id = api_spots.id
  65.                            order by xxu.id
  66.  
  67.                    )) = '#{array_marcados}' and
  68.                    api_marcacoes.aprovado = true
  69.              "
  70.  
  71.         if max_id > 0
  72.             sql += " and api_spots.id <= #{max_id} "
  73.         end
  74.  
  75.         sql += "order by
  76.                api_spots.created_at desc
  77.                limit #{cards} offset #{pagina * cards}"
  78.  
  79.  
  80.         dados = ::ActiveRecord::Base.connection.execute(sql)
  81.         tratar_dados(dados, true)
  82.     end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement