Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def trazer_marcados(marcados, cards, pagina, max_id = 0)
- m = '(0'
- marcados.each do |i|
- m = m + ', ' + i.to_s
- end
- m = m + ')'
- marcados.sort!
- array_marcados = "{0"
- marcados.each do |i|
- array_marcados = array_marcados + ',' + i.to_s
- end
- array_marcados = array_marcados + "}"
- array_marcados = array_marcados.gsub "{0,", "{"
- sql = "select distinct
- api_spots.id,
- api_spots.created_at,
- api_spots.anonima,
- api_spots.api_usuario_id,
- ARRAY(
- select distinct
- xxu.id
- from api_usuarios xxu
- inner join api_marcacoes xxm
- on xxm.api_usuario_id = xxu.id
- and xxm.api_spot_id = api_spots.id
- order by xxu.id
- ) as marcados_ids,
- ARRAY(
- select distinct
- xxu.nome
- from api_usuarios xxu
- inner join api_marcacoes xxm
- on xxm.api_usuario_id = xxu.id
- and xxm.api_spot_id = api_spots.id
- ) as marcados_nome,
- (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,
- (select api_usuarios.nome from api_usuarios where api_usuarios.id = api_comentarios.api_usuario_id) as nome,
- (select count(*) from api_comentarios where api_comentarios.api_spot_id = api_spots.id) as total_comentarios,
- (select count(*) from api_curtidas where api_curtidas.api_spot_id = api_spots.id) as total_curtidas,
- (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,
- (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,
- (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
- from api_spots
- inner join api_marcacoes on api_marcacoes.api_spot_id = api_spots.id
- left join api_comentarios on api_comentarios.api_spot_id = api_spots.id
- left join api_usuarios on api_usuarios.id = api_comentarios.api_usuario_id
- left join api_curtidas on api_curtidas.api_spot_id = api_spots.id
- where
- api_marcacoes.api_usuario_id in #{m} and
- (ARRAY(
- select distinct
- xxu.id
- from api_usuarios xxu
- inner join api_marcacoes xxm
- on xxm.api_usuario_id = xxu.id
- and xxm.api_spot_id = api_spots.id
- order by xxu.id
- )) = '#{array_marcados}' and
- api_marcacoes.aprovado = true
- "
- if max_id > 0
- sql += " and api_spots.id <= #{max_id} "
- end
- sql += "order by
- api_spots.created_at desc
- limit #{cards} offset #{pagina * cards}"
- dados = ::ActiveRecord::Base.connection.execute(sql)
- tratar_dados(dados, true)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement