From 965100df5171d9ce2b5908aaca4b272c5d3e397f Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Thu, 24 Apr 2025 08:48:43 +0200 Subject: [PATCH] Access events through collections --- app/controllers/concerns/events_timeline.rb | 13 ++----------- app/controllers/terminals_controller.rb | 2 +- app/models/collection.rb | 1 + app/models/user/accessor.rb | 1 + .../20250424045407_make_events_eventable.rb | 14 ++++++++++++++ ...make_notifications_source_id_not_nullable.rb | 5 +++++ ...0250424051059_add_collection_id_to_events.rb | 17 +++++++++++++++++ 7 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 db/migrate/20250424045407_make_events_eventable.rb create mode 100644 db/migrate/20250424045639_make_notifications_source_id_not_nullable.rb create mode 100644 db/migrate/20250424051059_add_collection_id_to_events.rb diff --git a/app/controllers/concerns/events_timeline.rb b/app/controllers/concerns/events_timeline.rb index c051c370d..681a190ee 100644 --- a/app/controllers/concerns/events_timeline.rb +++ b/app/controllers/concerns/events_timeline.rb @@ -19,21 +19,12 @@ module EventsTimeline end def events_for_activity_day - user_events.where(created_at: @activity_day.all_day) + Current.user.accessible_events.where(created_at: @activity_day.all_day) .group_by { |event| [ event.created_at.hour, helpers.event_column(event) ] } .map { |hour_col, events| [ hour_col, events.uniq { |e| e.id } ] } end def latest_event_before_activity_day - user_events.where(created_at: ...@activity_day.beginning_of_day).chronologically.last - end - - def user_events - Event.where(collection: collection_filter).where(eventable: user_cards) - end - - def user_cards - Current.user.accessible_cards - .published_or_drafted_by(Current.user) + Current.user.accessible_events.where(created_at: ...@activity_day.beginning_of_day).chronologically.last end end diff --git a/app/controllers/terminals_controller.rb b/app/controllers/terminals_controller.rb index e2840773a..552d285cd 100644 --- a/app/controllers/terminals_controller.rb +++ b/app/controllers/terminals_controller.rb @@ -1,6 +1,6 @@ class TerminalsController < ApplicationController def show - @events = Event.where(eventable: Current.user.accessible_cards, creator: Current.user).chronologically.reverse_order.limit(20) + @events = Current.user.accessible_events.chronologically.reverse_order.limit(20) end def edit diff --git a/app/models/collection.rb b/app/models/collection.rb index 236208c16..9cee579e6 100644 --- a/app/models/collection.rb +++ b/app/models/collection.rb @@ -5,6 +5,7 @@ class Collection < ApplicationRecord has_many :cards, dependent: :destroy has_many :tags, -> { distinct }, through: :cards + has_many :events scope :alphabetically, -> { order("lower(name)") } end diff --git a/app/models/user/accessor.rb b/app/models/user/accessor.rb index 89534b777..45b73dcc0 100644 --- a/app/models/user/accessor.rb +++ b/app/models/user/accessor.rb @@ -5,6 +5,7 @@ module User::Accessor has_many :accesses, dependent: :destroy has_many :collections, through: :accesses has_many :accessible_cards, through: :collections, source: :cards + has_many :accessible_events, through: :collections, source: :events after_create_commit :grant_access_to_collections end diff --git a/db/migrate/20250424045407_make_events_eventable.rb b/db/migrate/20250424045407_make_events_eventable.rb new file mode 100644 index 000000000..3094a77ae --- /dev/null +++ b/db/migrate/20250424045407_make_events_eventable.rb @@ -0,0 +1,14 @@ +class MakeEventsEventable < ActiveRecord::Migration[8.1] + def change + add_reference :events, :eventable, polymorphic: true, index: true + + execute <<~SQL + update events set eventable_type = 'Card', eventable_id = card_id; + SQL + + change_column_null :events, :eventable_id, false + change_column_null :events, :eventable_type, false + + remove_reference :events, :card + end +end diff --git a/db/migrate/20250424045639_make_notifications_source_id_not_nullable.rb b/db/migrate/20250424045639_make_notifications_source_id_not_nullable.rb new file mode 100644 index 000000000..512a9e34f --- /dev/null +++ b/db/migrate/20250424045639_make_notifications_source_id_not_nullable.rb @@ -0,0 +1,5 @@ +class MakeNotificationsSourceIdNotNullable < ActiveRecord::Migration[8.1] + def change + change_column_null :notifications, :source_id, false + end +end diff --git a/db/migrate/20250424051059_add_collection_id_to_events.rb b/db/migrate/20250424051059_add_collection_id_to_events.rb new file mode 100644 index 000000000..50f8e2432 --- /dev/null +++ b/db/migrate/20250424051059_add_collection_id_to_events.rb @@ -0,0 +1,17 @@ +class AddCollectionIdToEvents < ActiveRecord::Migration[8.1] + def change + add_reference :events, :collection, foreign_key: true, index: true + + execute <<~SQL + UPDATE events + SET collection_id = ( + SELECT cards.collection_id + FROM cards + WHERE cards.id = events.eventable_id + ) + WHERE eventable_type = 'Card' + SQL + + change_column_null :events, :collection_id, false + end +end