mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-03-26 02:33:03 -04:00
105 lines
2.1 KiB
Ruby
105 lines
2.1 KiB
Ruby
# 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
|