33## 概要
44CoderDojoの統計データを年次でダウンロードできる機能を実装する。` /dojos ` ページにクエリパラメータ(` ?year=2024 ` )を追加することで、特定年のデータや全年次統計をCSV/JSON形式でダウンロード可能にする。既存の ` /stats ` ページとの混乱を避けるため、` /dojos ` エンドポイントを拡張する形で実装する。
55
6+ ### データの取得範囲
7+ - ** yearパラメータなし(デフォルト)** :
8+ - HTML表示: 現在アクティブな道場のみ(既存の動作を維持)
9+ - CSV/JSONダウンロード: 全道場(アクティブ + 非アクティブ)
10+ - ** yearパラメータあり(例: year=2024)** :
11+ - HTML/JSON/CSV すべての形式: その年末時点でアクティブだった道場のみ
12+
613## 🎯 要件定義
714
815### Phase 1: 基本実装(MVP)
@@ -35,9 +42,9 @@ get '/dojos/:id', to: 'dojos#show' # HTML, JSON, CSV
3542# URLパターン例:
3643# GET /dojos → 現在のアクティブ道場一覧(HTML)
3744# GET /dojos?year=2024 → 2024年末時点のアクティブ道場一覧(HTML)
38- # GET /dojos.csv → 全年次統計データ
45+ # GET /dojos.csv → 全道場リスト(アクティブ + 非アクティブ)
3946# GET /dojos.csv?year=2024 → 2024年末時点のアクティブ道場リスト(CSV)
40- # GET /dojos.json → 全年次統計データ
47+ # GET /dojos.json → 全道場リスト(アクティブ + 非アクティブ)
4148# GET /dojos.json?year=2024 → 2024年末時点のアクティブ道場リスト(JSON)
4249```
4350
@@ -80,9 +87,19 @@ class DojosController < ApplicationController
8087
8188 @page_title = " #{ @selected_year } 年末時点のCoderDojo一覧"
8289 else
83- # yearパラメータなしの場合、現在のアクティブな道場リスト(既存の実装)
90+ # yearパラメータなしの場合
91+ # HTML表示: 現在のアクティブな道場のみ(既存の実装を維持)
92+ # CSV/JSONダウンロード: 全道場(アクティブ + 非アクティブ)
93+ if request.format .html?
94+ # HTMLの場合は現在アクティブな道場のみ
95+ dojos_scope = Dojo .active
96+ else
97+ # CSV/JSONの場合は全道場(非アクティブも含む)
98+ dojos_scope = Dojo .all
99+ end
100+
84101 @dojos = []
85- Dojo .includes(:prefecture ).order(order: :asc ).all .each do |dojo |
102+ dojos_scope .includes(:prefecture ).order(order: :asc ).each do |dojo |
86103 @dojos << {
87104 id: dojo.id,
88105 url: dojo.url,
@@ -101,12 +118,8 @@ class DojosController < ApplicationController
101118 # respond_toで形式ごとに処理を分岐
102119 respond_to do |format |
103120 format .html # => app/views/dojos/index.html.erb
104- format .json do
105- params[:year ].present? ? render_yearly_stats : render(json: @dojos )
106- end
107- format .csv do
108- params[:year ].present? ? render_yearly_stats : send_data(render_to_string, type: :csv )
109- end
121+ format .json { render json: @dojos }
122+ format .csv { send_data render_to_string, type: :csv }
110123 end
111124 end
112125
0 commit comments