# frozen_string_literal: true class PostQuery def self.duplicates(intensities, dist = 0.25) PostQuery.dupes(intensities[:nw], intensities[:ne], intensities[:sw], intensities[:se], dist) end # @param [Float] nw # @param [Float] ne # @param [Float] sw # @param [Float] se # @param [Float] dist def self.dupes(nw, ne, sw, se, dist = 0.25) Post.joins(image: [:intensity]).where( "(image_intensities.nw BETWEEN ? AND ?) AND (image_intensities.ne BETWEEN ? AND ?) AND (image_intensities.sw BETWEEN ? AND ?) AND (image_intensities.se BETWEEN ? AND ?)", nw - dist, nw + dist, ne - dist, ne + dist, sw - dist, sw + dist, se - dist, se + dist ).limit(10) end def self.interactions(post_ids, user_id) interactions = [ Post::Vote.where(post_id: post_ids).where(user_id: user_id, up: true).select("post_id, user_id, 'voted' as interaction_type, 'up' as value").to_sql, Post::Vote.where(post_id: post_ids).where(user_id: user_id, up: false).select("post_id, user_id, 'voted' as interaction_type, 'down' as value").to_sql, Post::Fave.where(post_id: post_ids).where(user_id: user_id).select("post_id, user_id, 'faved' as interaction_type, null as value").to_sql, Post::Hide.where(post_id: post_ids).where(user_id: user_id).select("post_id, user_id, 'hidden' as interaction_type, null as value").to_sql ] Post::Vote.find_by_sql(interactions.join(' UNION ALL ')) end end