---
# System prepended metadata

title: Users

---

# Users
`GET api/users/myinfo`
<span style="color: red; ">Done</span>
認証Header必要

- 指定したuser情報返す
### Request
Header
```
access-token: Header[access-token]
client: Header[client]
uid: Header[uid]
```
### Response
```
{
  name: string
  email: string
  counts: int
}
```
# Auth

`POST api/auth`
<span style="color: red; ">Done</span>
認証Header必要なし
- ユーザーの新規登録
### Request
```
{
  name: string
  email: string
  password: string
}
```
### Response
Header
```
access-token: Header[access-token]
client: Header[client]
uid: Header[uid]
```

`POST api/auth/sign_in`
<span style="color: red; ">Done</span>
認証Header必要なし
- ユーザーのログイン
### Request
```
{
  email: string
  password: string
}
```
### Response
Header
```
access-token: Header[access-token]
client: Header[client]
uid: Header[uid]
```

`DELETE api/auth/sign_out`
<span style="color: red; ">Done</span>
認証Header必要
- ユーザーのログアウト
### Request
```
{
  uid: string
  access-token: string
  client: string
}
```
### Response
なし


# UserTaps
`POST api/user_taps`
<span style="color: red; ">Done</span>
認証Header必要

* user_taps作成API
* user_tapsはリクエストごとに新規作成
* roomにも加算を通知
* countの乱数処理はfendでする．
### Request
```
{
    room_id: int
    counts: int
}
```
### Response
(多分)なし

# Themes
`GET api/themes?name="阪神"`
<span style="color: red; ">Done</span>
認証Header必要なし

- お題の一覧をtrend順に返す(limit 100?)
- クエリ入ってたら検索してヒットするやつ返します
### Request
### Response
```
{
  searched_themes:
  [
    {
      id: int
      user_id: int
      name: string
      rooms_num: int
      close_time: int
      duration: int
      total_counts: int
      is_closed: boolean
    }
  ]
}
```
急上昇度合いでソートして、上位数個を返す

`GET /api/themes/:id`
<span style="color: green; ">Todo</span>
認証Header必要

- when
    - (now < close_time)
        - what return
            - 指定されたお題の情報(userのroomのトータルタップ数, roomのトータルタップ数)
    - (otherwise)
        - what return
            - 指定されたお題の情報(userのroomのトータルタップ数, roomのトータルタップ数)
            - 時系列のuser_taps
### Request
### Response(now < close_time)
```
{
  name: string
  rooms_num: int
  close_time: int
  is_closed: boolean
  user_id: int
  created_at: int
  rooms: [
    {
      id: int
      name: string
      total_counts: int
      user_room_total_taps: int
      enthusiastic_close_time: int,
      tap_speed: float
    }
  ]
}
```
### Response(otherwise)
```
{
  name: string
  rooms_num: int
  close_time: int
  is_closed: boolean
  user_id: int
  created_at: int
  rooms: [
    {
      id: int
      name: string
      total_counts: int
      user_room_total_taps: int
      enthusiastic_close_time: int
      taps_ranking: {
          1: { name: string, total_taps: int },
          2: { name: string, total_taps: int },
          3: { name: string, total_taps: int }
      },
      time_series: [{num: 1, counts: 150},{2,200},...,{num,counts},...,{200,400}]
    }
  ]
}
```
`POST /api/themes`
<span style="color: red; ">Done</span>
認証Header必要

- お題を投稿する
- 同時にroomも作成
### Request
```
{
  name: string
  rooms_num: int
  duration: int
  rooms: [
    {
      name: string
    }
  ]
}
```
### Response
```
{
  id: int
  rooms: [
    {
        id: int
    }
  ]
}
```
