Skip to content

issue26 問題詳細取得APIを追加 - #112

Merged
Takenokomeshi merged 1 commit into
mainfrom
feat/get-problem
Aug 26, 2026
Merged

issue26 問題詳細取得APIを追加#112
Takenokomeshi merged 1 commit into
mainfrom
feat/get-problem

Conversation

@Takenokomeshi

Copy link
Copy Markdown
Contributor

Closes #26

概要

現在のユーザーのactive runに紐づく問題詳細を取得する
GET /api/rooms/{room_id}/problems/{problem_id}を実装しました。

変更内容

  • active runを既存のfind_active_runで取得
  • problemとrun内のproblem progressを組み合わせて問題詳細を取得
  • available・clearedの問題はProblemResponseとして返却
  • lockedの問題はPROBLEM_LOCKED(409)を返却
  • active runがない場合はRUN_NOT_FOUND(404)を返却
  • 不正なroom ID・problem IDは400を返却
  • 別run・別room・存在しないproblem・progressがないproblemは取得しない
  • repository・projection内部の失敗は詳細を露出せず500を返却

Responseへ公開する情報

ResponseはOpenAPIのProblemResponseに明示されている次の情報だけを構築します。

  • id
  • number
  • type
  • title
  • body_markdown
  • submission_type
  • assets
  • status
  • input_schema
  • hint_count

judge_config、正解操作、解答候補、hint本文、依存関係、is_required
repositoryのSELECT対象およびresponseに含めていません。

Asset URL resolver

assetのobject_keyを公開URLへ変換するためのAssetUrlResolver interfaceと、
AppStateへの注入箇所を追加しました。

本PRでは実際の公開base URL設定や具体的なresolver実装は行わず、#109へ残しています。
resolverやDBのエラーにはobject keyなどの内部情報を含めません。

テスト

  • available responseがOpenAPI fixtureと一致すること
  • cleared問題を取得できること
  • locked問題がPROBLEM_LOCKEDになること
  • 未認証、active runなし、不正UUID、問題不存在の各エラー
  • repositoryエラーが内部情報を露出せず500になること
  • assetのobject keyがresolverへ渡され、公開URLへ変換されること
  • 不正な保存値やhint数を安全に拒否すること
  • MariaDBでproblemとproblem progressを正しくJOINできること
  • 別run・別room・別problemでは取得できないこと

検証

  • mise run server-check
  • TEST_DATABASE_URL=<disposable MariaDB URL> mise run test-integration
  • git diff --check

@kaomojikun5 kaomojikun5 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Takenokomeshi
Takenokomeshi merged commit 3ffae6c into main Aug 26, 2026
10 checks passed
@Takenokomeshi
Takenokomeshi deleted the feat/get-problem branch August 26, 2026 07:10
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.

問題データを取得する

2 participants