3
3
## 概要
4
4
CoderDojoの統計データを年次でダウンロードできる機能を実装する。` /dojos ` ページにクエリパラメータ(` ?year=2024 ` )を追加することで、特定年のデータや全年次統計をCSV/JSON形式でダウンロード可能にする。既存の ` /stats ` ページとの混乱を避けるため、` /dojos ` エンドポイントを拡張する形で実装する。
5
5
6
+ ### データの取得範囲
7
+ - ** yearパラメータなし(デフォルト)** :
8
+ - HTML表示: 現在アクティブな道場のみ(既存の動作を維持)
9
+ - CSV/JSONダウンロード: 全道場(アクティブ + 非アクティブ)
10
+ - ** yearパラメータあり(例: year=2024)** :
11
+ - HTML/JSON/CSV すべての形式: その年末時点でアクティブだった道場のみ
12
+
6
13
## 🎯 要件定義
7
14
8
15
### Phase 1: 基本実装(MVP)
@@ -35,9 +42,9 @@ get '/dojos/:id', to: 'dojos#show' # HTML, JSON, CSV
35
42
# URLパターン例:
36
43
# GET /dojos → 現在のアクティブ道場一覧(HTML)
37
44
# GET /dojos?year=2024 → 2024年末時点のアクティブ道場一覧(HTML)
38
- # GET /dojos.csv → 全年次統計データ
45
+ # GET /dojos.csv → 全道場リスト(アクティブ + 非アクティブ)
39
46
# GET /dojos.csv?year=2024 → 2024年末時点のアクティブ道場リスト(CSV)
40
- # GET /dojos.json → 全年次統計データ
47
+ # GET /dojos.json → 全道場リスト(アクティブ + 非アクティブ)
41
48
# GET /dojos.json?year=2024 → 2024年末時点のアクティブ道場リスト(JSON)
42
49
```
43
50
@@ -80,9 +87,19 @@ class DojosController < ApplicationController
80
87
81
88
@page_title = " #{ @selected_year } 年末時点のCoderDojo一覧"
82
89
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
+
84
101
@dojos = []
85
- Dojo .includes(:prefecture ).order(order: :asc ).all .each do |dojo |
102
+ dojos_scope .includes(:prefecture ).order(order: :asc ).each do |dojo |
86
103
@dojos << {
87
104
id: dojo.id,
88
105
url: dojo.url,
@@ -101,12 +118,8 @@ class DojosController < ApplicationController
101
118
# respond_toで形式ごとに処理を分岐
102
119
respond_to do |format |
103
120
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 }
110
123
end
111
124
end
112
125
0 commit comments