From c43202ee5f81b450bdf757753098e0b6c254bdcf Mon Sep 17 00:00:00 2001 From: Yohei Yasukawa Date: Mon, 6 Mar 2023 18:07:40 +0900 Subject: [PATCH 1/2] Flatten UpcomingEvents API (in beta) for DojoMap --- app/controllers/events_controller.rb | 5 ++++- app/models/upcoming_event.rb | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 46c3cd475..a065d0985 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -6,7 +6,10 @@ def index respond_to do |format| format.html - format.json { render json: @upcoming_events } + format.json { + # DojoMap: https://map.coderdojo.jp + render json: UpcomingEvent.for_dojo_map + } end end end diff --git a/app/models/upcoming_event.rb b/app/models/upcoming_event.rb index 30f989f96..c6529a37b 100644 --- a/app/models/upcoming_event.rb +++ b/app/models/upcoming_event.rb @@ -34,6 +34,28 @@ def group_by_keyword(keyword) merge(Dojo.default_order). where('event_title like(?)', "%#{keyword}%") end + + def for_dojo_map + result = [] + dojos_and_events = eager_load(dojo_event_service: :dojo) + .since(Time.zone.today) + .merge(Dojo.default_order) + .group_by { |event| event.dojo_event_service.dojo } + + dojos_and_events.each do |dojo, events| + event = events.sort_by(&:event_at).first + result << { + id: dojo.id, + name: dojo.name, + url: dojo.url, + event_title: event[:event_title], + event_date: event[:event_at], + event_url: event[:event_url], + } + end + + result + end end def catalog From 29dfa17b1c04abf7a4ac7859edbd20d8e33ba55f Mon Sep 17 00:00:00 2001 From: Yohei Yasukawa Date: Mon, 6 Mar 2023 18:20:15 +0900 Subject: [PATCH 2/2] Use more appopriate name for Dojo & Events data --- app/models/upcoming_event.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/upcoming_event.rb b/app/models/upcoming_event.rb index c6529a37b..5656945b2 100644 --- a/app/models/upcoming_event.rb +++ b/app/models/upcoming_event.rb @@ -37,12 +37,12 @@ def group_by_keyword(keyword) def for_dojo_map result = [] - dojos_and_events = eager_load(dojo_event_service: :dojo) + 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 } - dojos_and_events.each do |dojo, events| + list_of_dojo_and_events.each do |dojo, events| event = events.sort_by(&:event_at).first result << { id: dojo.id,