|
3 | 3 | class EventsController < ApplicationController |
4 | 4 | before_action :is_logged_in?, only: %i[student coach] |
5 | 5 |
|
6 | | - RECENT_EVENTS_DISPLAY_LIMIT = 40 |
7 | | - |
8 | 6 | def index |
| 7 | + redirect_to upcoming_events_path |
| 8 | + end |
| 9 | + |
| 10 | + def upcoming |
9 | 11 | fresh_when(latest_model_updated, etag: latest_model_updated) |
10 | 12 |
|
11 | | - events = [Workshop.past |
12 | | - .includes(:chapter, :sponsors, :host, :permissions) |
13 | | - .joins(:chapter) |
14 | | - .merge(Chapter.active) |
15 | | - .limit(RECENT_EVENTS_DISPLAY_LIMIT)] |
16 | | - events << Meeting.past.includes(:venue, :permissions).limit(RECENT_EVENTS_DISPLAY_LIMIT) |
17 | | - events << Event.past.includes(:venue, :sponsors, :sponsorships, :permissions).limit(RECENT_EVENTS_DISPLAY_LIMIT) |
18 | | - events = events.compact.flatten.sort_by(&:date_and_time).reverse.first(RECENT_EVENTS_DISPLAY_LIMIT) |
19 | | - events_hash_grouped_by_date = events.group_by(&:date) |
20 | | - @past_events = events_hash_grouped_by_date.map.each_with_object({}) do |(key, value), hash| |
21 | | - hash[key] = EventPresenter.decorate_collection(value) |
22 | | - end |
23 | | - |
24 | | - events = [Workshop.upcoming |
25 | | - .includes(:chapter, :sponsors, :host, :permissions) |
26 | | - .joins(:chapter) |
27 | | - .merge(Chapter.active)] |
28 | | - events << Meeting.upcoming.includes(:venue, :permissions).all |
29 | | - events << Event.upcoming.includes(:venue, :sponsors, :sponsorships, :permissions).all |
30 | | - events = events.compact.flatten.sort_by(&:date_and_time).group_by(&:date) |
31 | | - @events = events.map.each_with_object({}) do |(key, value), hash| |
32 | | - hash[key] = EventPresenter.decorate_collection(value) |
33 | | - end |
| 13 | + @events, @pagy = fetch_upcoming_events |
| 14 | + end |
| 15 | + |
| 16 | + def past |
| 17 | + fresh_when(latest_model_updated, etag: latest_model_updated) |
| 18 | + |
| 19 | + @past_events, @pagy = fetch_past_events |
34 | 20 | end |
35 | 21 |
|
36 | 22 | def show |
@@ -84,4 +70,32 @@ def find_invitation_and_redirect_to_event(role) |
84 | 70 | def set_event |
85 | 71 | @event = Event.find_by(slug: params[:event_id]) |
86 | 72 | end |
| 73 | + |
| 74 | + def fetch_upcoming_events |
| 75 | + events = [Workshop.includes(:chapter, :sponsors).upcoming.joins(:chapter).merge(Chapter.active)] |
| 76 | + events << Meeting.upcoming.all |
| 77 | + events << Event.upcoming.includes(:venue, :sponsors, :sponsorships).all |
| 78 | + |
| 79 | + sorted = events.compact.flatten.sort_by(&:date_and_time) |
| 80 | + pagy, paginated = pagy(sorted, items: 20) |
| 81 | + |
| 82 | + grouped = paginated.group_by(&:date) |
| 83 | + decorated = grouped.transform_values { |items| EventPresenter.decorate_collection(items) } |
| 84 | + |
| 85 | + [decorated, pagy] |
| 86 | + end |
| 87 | + |
| 88 | + def fetch_past_events |
| 89 | + events = [Workshop.past.includes(:chapter, :sponsors).joins(:chapter).merge(Chapter.active)] |
| 90 | + events << Meeting.past.all |
| 91 | + events << Event.past.includes(:venue, :sponsors, :sponsorships).all |
| 92 | + |
| 93 | + sorted = events.compact.flatten.sort_by(&:date_and_time).reverse |
| 94 | + pagy, paginated = pagy(sorted, items: 20) |
| 95 | + |
| 96 | + grouped = paginated.group_by(&:date) |
| 97 | + decorated = grouped.transform_values { |items| EventPresenter.decorate_collection(items) } |
| 98 | + |
| 99 | + [decorated, pagy] |
| 100 | + end |
87 | 101 | end |
0 commit comments