---
# System prepended metadata

title: SPAJAM 2022 本戦

---

# SPAJAM 2022 本戦

## アイデア
```
- 背景
- 課題
- 既存の解決方法
- コンセプト
- ソリューション/コア機能
```


## サーバー仕様
API Endpoint:`https://spajam22t5final-api.yellowmoss-bd55362b.japaneast.azurecontainerapps.io/`

Docs: [https://spajam22t5final-api.yellowmoss-bd55362b.japaneast.azurecontainerapps.io/swagger/index.html](https://spajam22t5final-api.yellowmoss-bd55362b.japaneast.azurecontainerapps.io/swagger/index.html)


**以下はメモなので、最新の仕様はdocsを参照すること。**

---

必要なモデル
- ルーム
  - ルームID(トークン, クライアントが発行して送る？部屋ごとに一意)
  - 参加者
  - 開始時刻
    - 全員のready(コネクション確立)を待ってサーバー側で決定する。
  - お題ID
- ユーザー
  - 永続化しない。
  - ユーザーID
  - 国コード(ISO-3166)
    - 座標情報はクライアント側に任せる
  - ニックネーム
  - アイコンID
- お題
  - ID
  - 画像アセット(クライアントで持つ？)
- ユーザーの回答
  - 回答ユーザーID
  - 回答(お題の読み)
      

![](https://i.imgur.com/plAbtMZ.jpg)

必要なAPI
- POST /room/create
  - Hostが参加を締め切ってルームを作成する
  - request: ルームID、参加者数
  - response: 受付終了時間
      - 受付終了時間: この時間までstartを受けるが、それを過ぎて参加者が揃わなかった場合にcloseする時間
  - 既に重複するIDがある場合, 409を返す
  - roomがcloseした場合, 408を返す
- POST /room/standby
  - request: ルームID、ユーザー情報
  - long polling
  - 参加者が揃ったら、お題と開始時間を返す
    - 開始時間は必要か？long pollingなのでレスポンスを返すタイミングは揃っていそう -> 返す
  - 参加人数より多いリクエスト、既に参加しているユーザーIDのリクエストは409
  - roomがcloseした場合, 408を返す

以下はポーリングしない。GETはリクエストが送られてきた瞬間までの情報を返す。

- POST /room/submit
  - request: ルームID、ユーザーID、回答
  - お題に対する回答(もとの表記+ローマ字)を提出する
- GET /room/:id/answers
  - その時点で集まっている回答を返す
  - 部屋がcloseしていれば404
- POST /room/reactions/submit
  - request: ルームID、ユーザーID、リアクション対象のユーザーID、リアクションID
  - お題に対する回答を提出する
- GET /room/:id/reactions
  - その時点で集まっている回答を返す
  - 部屋がcloseしていれば404

**注意**
- expired_atはあまり機能していない。UserID, RoomID等はすべて一意なUUIDが無難。
