Skip to content

複数プランの電気料金を計算するAPI機能を作成#6

Merged
chanchan-co merged 10 commits into
masterfrom
feature/generate_electricity_charge_calculate_func
Oct 22, 2025
Merged

複数プランの電気料金を計算するAPI機能を作成#6
chanchan-co merged 10 commits into
masterfrom
feature/generate_electricity_charge_calculate_func

Conversation

@chanchan-co

Copy link
Copy Markdown
Owner

概要

  • 指定された契約アンペア数(A)と使用量(kWh)に該当するプランの電気料金を返すAPIを作成

やったこと

  • 電気料金を計算するためのサービスクラスを作成
  • 電気料金を返すエンドポイントの追加
  • サービスクラスのテストを作成
  • コントローラーのテストを作成

確認事項

  • make up
  • make web-bash
  • rails db:migrate:reset db:seed

使用量(kWh)0の確認

  • 基本料金のみが返ること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=30&usage=0" | jq
レスポンス
[
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "従量電灯B",
    "price": 858
  },
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "スタンダードS",
    "price": 935
  },
  {
    "provider_name": "東京ガス",
    "plan_name": "ずっとも電気1",
    "price": 858
  },
  {
    "provider_name": "Looopでんき",
    "plan_name": "おうちプラン",
    "price": 0
  }
]

2段階の従量料金区分の確認

  • 下記のレスポンス通りの結果が返ってくること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=30&usage=300" | jq
レスポンス
[
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "従量電灯B",
    "price": 8010
  },
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "スタンダードS",
    "price": 11063
  },
  {
    "provider_name": "東京ガス",
    "plan_name": "ずっとも電気1",
    "price": 7992
  },
  {
    "provider_name": "Looopでんき",
    "plan_name": "おうちプラン",
    "price": 8640
  }
]

3段階の従量料金区分の確認

  • 下記のレスポンス通りの結果が返ってくること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=30&usage=301" | jq
レスポンス
[
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "従量電灯B",
    "price": 8040
  },
  {
    "provider_name": "東京電力エナジーパートナー",
    "plan_name": "スタンダードS",
    "price": 11103
  },
  {
    "provider_name": "東京ガス",
    "plan_name": "ずっとも電気1",
    "price": 8016
  },
  {
    "provider_name": "Looopでんき",
    "plan_name": "おうちプラン",
    "price": 8668
  }
]

エラーハンドリングの確認

パラメータ不足

  • 必須パラメータエラーが返ること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=30" | jq
{
  "error": "契約アンペア数(A)と使用量(kWh)は必須です。"
}

不正な値

  • 数値以外の入力でエラーが返ること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=abc&usage=300" | jq
{
  "error": "契約アンペア数(A)と使用量(kWh)は数値で指定してください。"
}
  • 存在しないアンペア数を指定するとエラーが返ること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=25&usage=300" | jq
{
  "error": "契約アンペア数(A)は10A, 15A, 20A, 30A, 40A, 50A, 60Aのいずれかを指定してください。"
}
  • 負の使用量を指定するとエラーが返ること
curl -X GET "http://localhost:3000/api/v1/electricity_charges?ampere=30&usage=-300" | jq
{
  "error": "使用量(kWh)は0以上を指定してください。"
}

補足

  • 確認事項ではjqを利用していますが、jqが未インストールの方は | jqを削除してください。
  • 電気料金 端数 電力会社と調べると円未満切り捨てと業界ルールを見つけたので
    計算ロジックの途中の計算では端数を入れた状態で計算をして合計金額に対してfloorで端数を切り捨てております。
  • 想定しすぎかも知れませんが、Planモデルなどに計算処理を作成すると電気以外のドメイン要件が発生した時に
    剥がしにくい、計算ロジック分散のリスク、テストのしやすさなどを考えてサービスクラスを作成しております。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant