33class EventsController < ApplicationController
44 before_action :is_logged_in? , only : %i[ student coach ]
55
6- RECENT_EVENTS_DISPLAY_LIMIT = 40
7-
86 def index
7+ redirect_to upcoming_events_path
8+ end
9+
10+ def upcoming
911 fresh_when ( latest_model_updated , etag : latest_model_updated )
1012
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
3420 end
3521
3622 def show
@@ -57,7 +43,7 @@ def rsvp
5743 set_event
5844 ticket = Services ::Ticket . new ( request , params )
5945 member = Member . find_by ( email : ticket . email )
60- invitation = member . invitations . where ( event : @event , role : 'Student' ) . try ( : first)
46+ invitation = member . invitations . where ( event : @event , role : 'Student' ) . first
6147 invitation ||= Invitation . create ( event : @event , member : member , role : 'Student' )
6248
6349 invitation . update ( attending : true )
@@ -84,4 +70,42 @@ def find_invitation_and_redirect_to_event(role)
8470 def set_event
8571 @event = Event . find_by ( slug : params [ :event_id ] )
8672 end
73+
74+ def fetch_upcoming_events
75+ events = [
76+ Workshop . includes ( :chapter , :sponsors , :host , :permissions )
77+ . upcoming
78+ . joins ( :chapter )
79+ . merge ( Chapter . active )
80+ ]
81+ events << Meeting . upcoming . includes ( :venue , :permissions ) . all
82+ events << Event . upcoming . includes ( :venue , :sponsors , :sponsorships , :permissions ) . all
83+
84+ sorted = events . compact . flatten . sort_by ( &:date_and_time )
85+ pagy , paginated = pagy ( sorted , items : 20 )
86+
87+ grouped = paginated . group_by ( &:date )
88+ decorated = grouped . transform_values { |items | EventPresenter . decorate_collection ( items ) }
89+
90+ [ decorated , pagy ]
91+ end
92+
93+ def fetch_past_events
94+ events = [
95+ Workshop . includes ( :chapter , :sponsors , :host , :permissions )
96+ . past
97+ . joins ( :chapter )
98+ . merge ( Chapter . active )
99+ ]
100+ events << Meeting . past . includes ( :venue , :permissions ) . all
101+ events << Event . past . includes ( :venue , :sponsors , :sponsorships , :permissions ) . all
102+
103+ sorted = events . compact . flatten . sort_by ( &:date_and_time ) . reverse
104+ pagy , paginated = pagy ( sorted , items : 20 )
105+
106+ grouped = paginated . group_by ( &:date )
107+ decorated = grouped . transform_values { |items | EventPresenter . decorate_collection ( items ) }
108+
109+ [ decorated , pagy ]
110+ end
87111end
0 commit comments