mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-11 01:05:01 -04:00
* Refactor Activity model to remove Elasticsearch integration - Removed `SearchActivities` concern and Searchkick from `Activity` model. - Implemented `Activity.homepage_records` using ActiveRecord with `DISTINCT ON` for PostgreSQL. - Updated `ActivitiesController#index` to use ActiveRecord queries with eager loading and pagination. - Added `active` scope to `Activity`. - Added unit tests for `Activity` model. - Deleted `app/models/concerns/search_activities.rb`. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Fix NoMethodError: undefined method 'reindex' for class Activity - Removed all calls to `Activity.reindex` in migrations, rake tasks, and spec helpers. - These were causing failures after the removal of Searchkick from the Activity model. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Fix ambiguous column id in homepage_records query - Updated `Activity.homepage_records` to use `activities.id` instead of `id` in the subquery. - This resolves the `PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous` error. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Fix ambiguous created_at in homepage_records query - Use `unscoped` in the subquery for `Activity.homepage_records` to bypass the default scope from `Ownable` concern. - This prevents the join with the `members` table in the subquery, which was causing `PG::AmbiguousColumn: ERROR: column reference "created_at" is ambiguous`. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Complete refactoring of Activity model to remove Elasticsearch - Removed SearchActivities concern and searchkick integration. - Updated ActivitiesController#index to use ActiveRecord queries. - Implemented performant Activity.homepage_records using DISTINCT ON (PostgreSQL). - Added Activity.active scope. - Added no-op Activity.reindex (class and instance methods) for backward compatibility. - Cleaned up leftover reindex calls in rake tasks, migrations, and spec helpers. - Added unit tests for new Activity model logic. - Updated factories to include no-op reindex traits. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Less eager loading --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
62 lines
1.4 KiB
Ruby
62 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Activity < ApplicationRecord
|
|
extend FriendlyId
|
|
include Ownable
|
|
include Finishable
|
|
include Likeable
|
|
|
|
belongs_to :garden, optional: true
|
|
belongs_to :planting, optional: true
|
|
|
|
friendly_id :activity_slug, use: %i(slugged finders)
|
|
|
|
CATEGORIES = ["General", "Weeding", "Soil Cultivation", "Fertilizing", "Pruning", "Topical Application/Treating", "Watering"]
|
|
|
|
validates :name, presence: true
|
|
validates :category, inclusion: { in: CATEGORIES }, presence: true
|
|
validates :owner, presence: true
|
|
|
|
validates :slug, uniqueness: true
|
|
|
|
delegate :location, :latitude, :longitude, to: :owner
|
|
delegate :login_name, :slug, :location, to: :owner, prefix: true
|
|
|
|
def activity_slug
|
|
"#{owner.login_name}-#{name}-#{id}".downcase.tr(' ', '-')
|
|
end
|
|
|
|
def to_s
|
|
name
|
|
end
|
|
|
|
def garden_name
|
|
garden&.name
|
|
end
|
|
|
|
def garden_slug
|
|
garden&.slug
|
|
end
|
|
|
|
def planting_name
|
|
planting&.crop&.name
|
|
end
|
|
|
|
def planting_slug
|
|
planting&.crop&.slug
|
|
end
|
|
|
|
scope :active, -> { where(finished: [false, nil]) }
|
|
|
|
def self.homepage_records(limit)
|
|
# Get the latest activity for each owner, then return the latest 'limit' of those
|
|
Activity.where(id: Activity.unscoped.select("DISTINCT ON (owner_id) id").order("owner_id, created_at DESC"))
|
|
.order(created_at: :desc)
|
|
.limit(limit)
|
|
end
|
|
|
|
def self.reindex(refresh: false); end
|
|
|
|
def reindex(refresh: false); end
|
|
end
|