---
# System prepended metadata

title: フロントエンドがほしい gRPC メソッド
tags: [szpp-judge]

---

# フロントエンドがほしい gRPC メソッド

あるとうれしい:tada:メソッドを列挙するだけ．これをもとに proto 作ってくれたら 𝑩𝑰𝑮 𝑳𝑶𝑽𝑬

## ページによる分類

**読み方**
- ページを主語にして「そのページでやりたいことを実現するためにほしいメソッド」で1列にまとまっている．ユースケース単位といってもよい(ページ = URLのパス ≒ ユースケース だから)
- ほしいメソッドは1つとは限らない
- 例えばトップページは 「-> トップページの内容」と書いたがリクエストボディなしでレスポンスがトップページの内容，という意味
    - 例えばコンテスト(名)とタスク(名)を渡すとタスクを返すエンドポイントはコンテストとタスク集合を一緒に返すエンドポイントがあれば一度キャッシュしといて使い回せるかもしれないし，愚直にコンテスト(名)からタスクを返すエンドポイントとコンテスト(名)とタスク(名)からタスクを返すエンドポイントの組み合わせでも実現できる．

|フェーズ|整備状況|フロントエンドのページ `パス`|ほしいエンドポイントの仕様 req -> res|
|---|---|---|---|
|:one:|:x:| トップ `/` |() -> トップページの内容|
|:one:|✅ UserService/CreateUser|ユーザ登録 `/register`|ログイン情報 -> ()|
|:one:|✅ AuthService/Login|ログイン `/login`|ログイン情報 -> {アクセス, リフレッシュ}トークン|
|:one:|✅ ContestService/GetContest|(とある1つの)コンテスト`/contests/[contest_slug]`|コンテスト名 -> コンテスト|
|:one:|✅<br>1. ContestService/GetContest<br>2. TaskService/GetTask|コンテストタスク一覧 `/contests/[contest_slug]/tasks`|1. コンテスト名 -> タスクID\[\]<br>2. foreach タスクID\[\] -> タスク|
|:one:|:construction:バーチャルコンテストのタスク作成に未対応のため<br>1. ContestService/CreateContest<br>2. TaskService/GetTask|コンテストタスク詳細(タスクの編集と提出も兼ねる) `/contests/[slug]/tasks/[task_slug]`|(コンテスト名, タスク名) -> タスク|
|:one:|:construction: ContestService/CreateContest|コンテスト作成 `/contests/create`|コンテスト -> 作成されたコンテスト|
|:one:|✅ ContestService/GetStandings|順位表 `/contests/[contest_slug]/standings`|コンテスト名 -> 順位表\[\]|
|:one:|✅<br>1. TaskService/ListClarifications<br>(2. TaskService/GetClarification)|Clar(参加者から運営への質問ページ) `/contests/[contest_slug]/clarifications`|タスク -> (質問, 回答?)\[\]|
|:one:|✅ TaskService/ListSubmission(`contest_id=[contest_slug]`)|コンテスト内の提出一覧 `/contests/[contest_slug]/submissions`|コンテスト名 -> 提出\[\]|
|:one:|✅ TaskService/ListSubmissions|提出一覧 `/submissions`|() -> 提出\[\]|
|:one:|✅ TaskService/GetSubmissionDetail|提出詳細 `/submissions/[id]`<br>`/contests/[contest_slug]/submissions` ?|提出ID -> 提出|
|:two:|:x:|ランキング `/ranking`|要件未定|
|:two:|:x:|プロフィール `/users/[username]`|ユーザ名 -> ユーザ|
|:two:|:x:|コードテスト `/custom-test`|(コード, 標準入力) -> 結果|

## コンポーネントによる分類

## 上記どれでもないやつ

|フェーズ|整備状況|ほしい機能・やりたい操作|ほしいエンドポイントの仕様 req -> res|
|---|---|---|---|
|:one:|✅ AuthService/Logout|ログアウト|リフレッシュトークン -> ()|
|:one:|:construction: AuthService/RefreshAccessToken|refresh token を使って access tokn を更新する|リフレッシュトークン -> アクセストークン|

### メモ
- TaskService
  - **ListSubmissions**
    - \[want\]取得といいつつ検索ももあると嬉しい．検索といっても自分の提出と全員の提出の2択で十分？
    - \[want\] 提出集合を最新のものから順に返す．結果や実行時間順の並べ替えに対応．(ContestService に提出を司る API を生やす？)
  - **ListClarifications**
    - 質問と回答の組を返す
    - \[want\] コンテスト名を渡すと Clar の一覧が返ってくる
- ContestService
  - **CreateContest**
    - [PR16 comment](https://github.com/szpp-dev-team/szpp-judge/pull/16#issuecomment-1698876481) を参照
  - **GetStandings**
    - \[want\] スコア順に返す
  - **GetContest**\
    - \[want\] 将来的には "コンテスト名 -> タスク\[\]" だと嬉しい
- AuthService
  - **Logout**
    - リフレッシュトークンをリクエストに含める理由: そのリフレッシュトークンがもう使えないようにするため
- その他
  - \[want\] 参加登録のためのエンドポイントもほしい