# frozen_string_literal: true class TimelineService def self.member_query(member) query.where(owner_id: member.id) end # A timeline of events by people the member follows def self.followed_query(member) query.where(owner_id: [member.followed.pluck(:id)]) end def self.query plantings_query .union_all(harvests_query) .union_all(posts_query) .union_all(comments_query) .union_all(photos_query) .union_all(seeds_query) .union_all(activities_query) .union_all(likes_query) .where.not(event_at: nil) .order(event_at: :desc) end def self.likes_query Like .select("likes.id", "'like' as event_type", "likes.created_at as event_at", "likes.member_id as owner_id", "null as crop_id") end def self.activities_query Activity.select( :id, "'activity' as event_type", 'COALESCE(activities.due_date, activities.created_at) as event_at', :owner_id, 'null as crop_id' ) end def self.plantings_query Planting.select( :id, "'planting' as event_type", 'planted_at as event_at', :owner_id, :crop_id ) end def self.harvests_query Harvest.select( :id, "'harvest' as event_type", 'harvested_at as event_at', :owner_id, :crop_id ) end def self.seeds_query Seed.select( :id, "'seed' as event_type", "seeds.created_at as event_at", :owner_id, :crop_id ) end def self.posts_query Post.select( :id, "'post' as event_type", 'posts.created_at as event_at', 'author_id as owner_id', 'null as crop_id' ) end def self.comments_query Comment.select( :id, "'comment' as event_type", 'comments.created_at as event_at', 'author_id as owner_id', 'null as crop_id' ) end def self.photos_query Photo.select( :id, "'photo' as event_type", "photos.created_at as event_at", :owner_id, 'null as crop_id' ) end end