mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-10-31 03:09:06 -04:00
- Implement RecentActivity service to track recent planting, harvesting, and trading events. - Enhance TimelineService to include garden layouts in event queries. - Update navigation menu to include a link to friends and neighbours. - Create member card partial for displaying gardener information. - Add follow button partial for managing follow actions. - Refactor members index view to use the new member card partial. - Introduce neighbours feed view with daily updates and entries. - Implement entry partial for displaying individual neighbour activities. - Create layout partial for visualizing garden layouts. - Add posts section to neighbours view for displaying recent posts. - Implement reach section to show nearby gardeners. - Add suggestions section for recommending gardeners to follow. - Create routes for neighbours functionality and member dismissals. - Add migrations for member dismissals and garden layout timestamps. - Write feature and request specs for neighbours functionality. - Include support for creating located members in tests.
24 lines
1.2 KiB
Ruby
24 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# What members have lately planted, harvested and put up for trade, newest
|
|
# first, as one list of events.
|
|
class RecentActivity
|
|
Event = Struct.new(:member, :verb, :subject, :at, :following, keyword_init: true)
|
|
|
|
def self.events(member_ids, following: false)
|
|
return [] if member_ids.empty?
|
|
|
|
events = Planting.where(owner_id: member_ids).includes(:owner, :crop).order(planted_at: :desc).limit(10).map do |planting|
|
|
Event.new(member: planting.owner, verb: 'planted', subject: planting.crop, at: planting.planted_at, following:)
|
|
end
|
|
events += Harvest.where(owner_id: member_ids).includes(:owner, :crop).order(harvested_at: :desc).limit(10).map do |harvest|
|
|
Event.new(member: harvest.owner, verb: 'harvested', subject: harvest.crop, at: harvest.harvested_at, following:)
|
|
end
|
|
seeds = Seed.current.tradable.where(owner_id: member_ids).includes(:owner, :crop).order(created_at: :desc).limit(5)
|
|
events += seeds.map do |seed|
|
|
Event.new(member: seed.owner, verb: 'has seeds to trade:', subject: seed.crop, at: seed.created_at, following:)
|
|
end
|
|
events.compact.sort_by { |event| event.at || Time.zone.at(0) }.reverse
|
|
end
|
|
end
|