Skip to content

Commit dc06bb5

Browse files
committed
docs: データ取得範囲の仕様を正確に記述
重要な仕様の明確化: - yearパラメータなし: - HTML: 現在アクティブな道場のみ(既存動作維持) - CSV/JSON: 全道場(アクティブ + 非アクティブ) - yearパラメータあり(例: year=2024): - HTML/JSON/CSV すべて: その年末時点のアクティブ道場のみ すべての形式(HTML/JSON/CSV)がyearパラメータを正しく処理
1 parent cb64d0b commit dc06bb5

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

docs/plan_download_yearly_stats.md

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
## 概要
44
CoderDojoの統計データを年次でダウンロードできる機能を実装する。`/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

Comments
 (0)