---
# System prepended metadata

title: API設計

---

# API設計

## ユーザー操作
### ログイン
ログイン
- Method
    - POST
- Endpoint
    - /user/login
- Parameters(引数)
    - email : String
        ユーザーが入力したメールアドレス（unique，not null）
    - password : String
        ユーザーが入力したパスワード（not null）
- Returns（返り値）
    - ステータスコード
        - 200
    - id : int
        ユーザーid
    - token: String (base64 JWT Token)
        ユーザートークン
- Errors(ステータスコード) 
    - 400
        - msg: "email is required！" or "password is required!"
            - メールアドレスかパスワードが入力されていない
    - 403
        - msg : "email or password is wrong!"
            - メールアドレスかパスワードが違う
            - メールアドレスがデータベースに存在しない

### ユーザー登録(未完成)
ユーザー登録
- Method
    - POST
- Endpoint
    - /user
- Parameters(引数)
    - email : String (length:128)
        ユーザーのメールアドレス（unique，not null）
    - password : String (length:256)
        ユーザが入力したパスワード（not null）
    - first_name : String (not null) (length:128)
    - last_name : String (not null) (length:128)
    - nick_name : String (not null) (length:128)
    - department : String (not null) (length:128)
    - image : File (not null) 
    - birth_place : String (length:128)
    - hobby : String (length:128)
    - past_experience : String (length:256)
    - motivation : String (length:256)
    - tags : Array[dict (size:32)] (size:4, not null)
- Returns（返り値）
    - ステータスコード
        - 200
    - msg : "Sucess"
- Errors(ステータスコード) 
    - 400
        - msg : "{parameter} is required!"
            - 必須パラメーターが入力されていない
    - 400
        - msg : "database error"
            - データベース挿入時のエラー (入力が長すぎる など)
    

### Email Validation
入力されたEメールアドレスがデータベースに既に存在しているか確認
カーソルが離れたら叩く
- Method
    - GET
- Endpoint
    - /user/check_email
- Parameters(引数)
    - email : String
        ユーザーのメールアドレス（unique，not null）
- Returns（返り値）
    - result : "1" or "0"
        データベースにメールアドレスが既に存在しているか（0:存在しない；1:存在する）
- Errors(ステータスコード) 
    - 400
        - msg : "{parameter} is required!"
            - 必須パラメーターが入力されていない

### ログアウト
ログアウト
AWSを使うならいらない
- Method
    - GET
- Endpoint
    - /user/logout
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - なし
- Returns（返り値）
    - ステータスコード
        - 200
        - msg : "logout successful"
- Errors(ステータスコード) 
    - なし

### プロフィール修正
プロフィールの修正
何も
- Method
    - PUT
- Endpoint
    - /user/profile/edit
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - email : String（unique）(length:128)
        ユーザーのメールアドレス
    - first_name : String(length:128)
    - last_name : String(length:128)
    - nick_name : String(length:128)
    - department : String(length:128)
    - image : File
    - birth_place : String(length:128)
    - hobby : String (length:128)
    - past_experience : String (length:256)
    - motivation : String (length:256)
    - tags : Array[dict (length:32)] (size:4, not null)
- Returns（返り値）
    - ステータスコード
        - 200
- Errors(ステータスコード) 
    - 400

### ユーザー情報の取得
ユーザー情報の取得
- Method
    - GET
- Endpoint
    - /user/{user_id}
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - user_id : int
        ユーザーid（not null）
- Returns（返り値）
    - ステータスコード
        - 200
    - user_id : int (not null)
    - email : String
    - first_name : String (not null)
    - last_name : String (not null)
    - nick_name : String (not null)
    - department : String (not null)
    - image : File (not null)
    - birth_place : String
    - hobby : String
    - past_experience : String
    - motivation : String
    - tags : Array[dict] (size:4, not null)
- Errors(ステータスコード) 
    - 404
        - msg : "user does not exist!"
            - 指定した id のユーザーが存在しない

## 会議操作
### 会議履歴の取得
参加した会議の履歴の取得
- Method
    - GET
- Endpoint
    - /meeting/user/
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - なし
- Returns（返り値）
    - ステータスコード
        - 200
    - meetings : Array[int]
        参加したルームのarray
- Errors(ステータスコード) 
    - 400

### 会議の情報の取得
会議の情報の取得
- Method
    - GET
- Endpoint
    - /meeting/{meeting_id}
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - meeting_id : int
        ルームid
- Returns（返り値）
    - ステータスコード
        - 200
    - name : String
        参加した会議の名前
    - date : Date
        参加した会議の開催日
    - users : Array[User]
        - user の情報のリスト
    - "msg" : "success"
- Errors(ステータスコード) 
    - 404
        - msg : Meeting id does not exist.
            - ミーティングIDがデータベースに存在しない

### 会議の登録
会議の登録
- Method
    - POST
- Endpoint
    - /meeting/create
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - name : String(length:256)
        会議の名前
    - date : Date
        会議の開催日
<!--     - password : String
        会議のパスワード -->
- Returns（返り値）
    - ステータスコード
        - 200
    - meeting_id : int
    - meeting_pass : String
    - meeting_url : String
        招待URL(https://yoroyolo/meeting/{meeting_id}/{password})
- Errors(ステータスコード) 
    - 400
        - msg : "{parameter} is required!"
            - 必須パラメーターが入力されていない

### 会議を終了
会議を終了
- Method
    - PUT
- Endpoint
    - /meeting/{meeting_id}/end
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - meeting_id : int
        会議の id
- Returns（返り値）
    - ステータスコード
        - 200
        - "meeting_id" : id
- Errors(ステータスコード) 
    - 400
        - "msg" : "This meeting is already finished!"
            - 会議が既に終了している
    - 404
        - "msg" : "Meeting id does not exist!"
            - ミーティング id が間違いている

### ユーザーを会議に登録
ユーザーが招待URLをクリックすると，ユーザーを会議の参加者リストに追加する
- Method
    - POST
- Endpoint
    - /meeting/{meeting_id}/add
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - meeting_id : int
        会議の id
- Returns（返り値）
    - ステータスコード
        - 200
        - meeting_id : int
            会議の id
    - ステータスコード
        - 202
        - "msg" : "you have already joined the meeting!"
        既に登録済
- Errors(ステータスコード) 
    - 404
        - "msg" : "Meeting id does not exist"
            - ミーティングIDがデータベースに存在しない
        


<!-- ### 紹介内容に対するLike
紹介内容に対するLike
していなかったらLike、既にしていたら取り消し
- Method
    - POST
- Endpoint
    - /user/like
- Parameters(引数)
    - user_id : int
        見る人の id（not null）
    - target_id : int
        メモの対象の人の id
- Returns（返り値）
    - ステータスコード
        - 200
    - like : int
        いいねしたかどうか（0: いいねしていない、1: いいね）
- Errors(ステータスコード) 
    - 400
        必須項目が入力されていない（ログインしていない / target_id がない） -->


## 覚えておきたい人リスト
### 覚えておきたい人リストの表示
覚えておきたい人のリストの表示
- Method
    - GET
- Endpoint
    - /favorite
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - なし
- Returns（返り値）
    - ステータスコード
        - 200
    - users : Array[int]
        覚えておきたい人の id の array
- Errors(ステータスコード) 


### 覚えておきたい人リストに登録
覚えておきたい人のリストに登録
- Method
    - POST
- Endpoint
    - /favorite
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - target_id : int（not null）
        リストに登録する人の id
- Returns（返り値）
    - ステータスコード
        - 200
        - "msg" : "success to favorite"
- Errors(ステータスコード) 
    - 400
        - "msg" : "You cannot register yourself to your favorite list"
            -  自分自身を登録しようとする場合
    - 403
        - "msg" : You have added him/her to your favorite list"
            - 既に登録してある場合
    - 404
        - msg : "user id does not exist!"
            - 指定した id のユーザーが存在しない

### 覚えておきたい人リストから削除
覚えておきたい人のリストから削除
- Method
    - DELETE
- Endpoint
    - /favorite
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - target_id : int（not null）
        リストに登録する人の id
- Returns（返り値）
    - ステータスコード
        - 200
- Errors(ステータスコード) 
    - 400
        - "msg" : "You cannot register yourself to your favorite list"
            -  自分自身を登録しようとする場合
    - 403
        - "msg" : You have added him/her to your favorite list"
            - 既に登録してある場合
    - 404
        - msg : "user id does not exist!"
            - 指定した id のユーザーが存在しない
        
## メモ
### メモ情報の取得
自分だけが見れるその人に関してのメモを取得
- Method
    - GET
- Endpoint
    - /memo/{target_id}
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - target_id : int
        メモの対象の人の id
- Returns（返り値）
    - ステータスコード
        - 200
    - content : String(length:256)
        メモテキスト
- Errors(ステータスコード) 
    - 404
        - msg : "user id does not exist!"
            - 指定した id のユーザーが存在しない
        
### メモ情報の追加・編集
自分だけが見れるその人に関してのメモを追加・編集
- Method
    - POST
- Endpoint
    - /memo/edit/{target_id}
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - content : String（not null）
        見る人の id
    - target_id : int
        メモの対象の人の id
- Returns（返り値）
    - ステータスコード
        - 200
    - content : String
        - 変更後の内容
    - msg : "Add memo successfully!"
- Errors(ステータスコード) 
    - 400
        content が存在しない
    - 404
        - msg : "user id does not exist!"
            - 指定した id (target_id)のユーザーが存在しない

<!-- ### メモ情報の編集
自分だけが見れるその人に関してのメモを編集
- Method
    - PUT
- Endpoint
    - /memo
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - target_id : int
        メモの対象の人の id
    - content : String
- Returns（返り値）
    - ステータスコード
        - 200
- Errors(ステータスコード) 
    - 400
        必須項目が入力されていない（ログインしていない / target_id がない） -->


## 検索
### 検索
今まで同じ会議に参加したことのある人からキーワードで部分一致検索
対象フィールドはfirst_name, last_name, nick_name, birth_place, hobby, past_experience, motivation, tag
半角スペース、全角スペースでクエリを分割し、AND検索
- Method
    - GET
- Endpoint
    - /search/?query={query}
- Headers
    - Authorization : Bearer {token}
- Parameters(引数)
    - なし
- Returns（返り値）
    - ステータスコード
        - 200
    - users : Array[int]
        キーワードを含むユーザーの id
- Errors(ステータスコード) 
    - なし
        
## 画像
### 画像表示
与えられた URL で画像を表示
- Method
    - GET
- Endpoint
    - /img/{filename}
- Parameters(引数)
    - なし
- Returns（返り値）
    - ステータスコード
        - 200
- Errors(ステータスコード) 
    - 400
    


