From c4f2a370d3f84ba723d94f5362331c71734fe880 Mon Sep 17 00:00:00 2001 From: takatama Date: Sat, 15 Jul 2023 10:12:50 +0900 Subject: [PATCH] Add all_events parameter --- app/controllers/events_controller.rb | 3 +- app/models/upcoming_event.rb | 53 +++++++++++++++++----------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index a065d0985..4e7ebedb1 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -3,12 +3,13 @@ def index @url = request.url @upcoming_events = UpcomingEvent.group_by_prefecture @pokemon_events = UpcomingEvent.group_by_keyword('ポケモン') + all_events = params[:all_events] == 'true' respond_to do |format| format.html format.json { # DojoMap: https://map.coderdojo.jp - render json: UpcomingEvent.for_dojo_map + render json: UpcomingEvent.for_dojo_map(all_events) } end end diff --git a/app/models/upcoming_event.rb b/app/models/upcoming_event.rb index aa90d25db..70b945110 100644 --- a/app/models/upcoming_event.rb +++ b/app/models/upcoming_event.rb @@ -35,35 +35,48 @@ def group_by_keyword(keyword) where('event_title like(?)', "%#{keyword}%") end - def for_dojo_map + def for_dojo_map(all_events = false) result = [] list_of_dojo_and_events = eager_load(dojo_event_service: :dojo) .since(Time.zone.today) .merge(Dojo.default_order) .group_by { |event| event.dojo_event_service.dojo } - + list_of_dojo_and_events.each do |dojo, events| - event = events.sort_by(&:event_at).first - result << { - id: dojo.id, - name: dojo.name, - url: dojo.url, - event_id: event[:id], - event_title: event[:event_title], - event_date: event[:event_at], - event_end_at: event[:event_end_at], - event_url: event[:event_url], - prefecture: dojo.prefecture.name, - participants: event[:participants], - event_update_at: event[:event_update_at], - address: event[:address], - place: event[:place], - limit: event[:limit] - } + sorted_events = events.sort_by(&:event_at) + if all_events + sorted_events.each do |event| + result << build_event_hash(dojo, event) + end + else + event = sorted_events.first + result << build_event_hash(dojo, event) + end end - + result end + + private + + def build_event_hash(dojo, event) + { + id: dojo.id, + name: dojo.name, + url: dojo.url, + event_id: event[:id], + event_title: event[:event_title], + event_date: event[:event_at], + event_end_at: event[:event_end_at], + event_url: event[:event_url], + prefecture: dojo.prefecture.name, + participants: event[:participants], + event_update_at: event[:event_update_at], + address: event[:address], + place: event[:place], + limit: event[:limit] + } + end end def catalog