# 食品ロス対策SNS(仮称) 仕様書(第3版)
[食品ロス対策SNS(仮称) 仕様書(第2版)](/aTxCOskGTSuCWwuGS46MFg)
[食品ロス対策SNS(仮称) 仕様書(第1版)](/xNzmKWENTKSt1HESSG9ISg)
# APIドキュメント
### ユーザー処理系
ユーザー処理に関するAPI
#### ユーザー登録
`/api/v1/user/register`
ユーザー登録をする
ユーザー登録後、ログインが必要
- POST
- パラメーター
```
{
"mailaddr": "<メールアドレス>",
"username": "<ユーザー名>",
"shopname": "<店名>",
"password": "パスワード",
"type": "[shop,customer]" // 事業者or個人
}
// ユーザー名・店名はどちらか一方
```
- レスポンス
```
{
"status": "<status>", // OK,NG
"message": "<失敗したときのメッセージ(日本語)>"
}
```
- 結果例
- ユーザー名が既に存在する場合、拒否される
- 指定のメールアドレスを持ったユーザーが既に存在する場合、拒否される
#### ログイン
`/api/v1/user/login`
ログインする
成功するとトークンがCookieに書き込まれる
- POST
- パラメーター
```
{
"username": "<ユーザー名>",
"password": "<パスワード>",
"autologin": "<true/false>"
}
```
- レスポンス
```
{
"status": "<status>", // OK,NG
"message": "<失敗したときのメッセージ(日本語)>",
}
```
- 結果例
- パズワードが間違っている場合、拒否される
#### ログアウト
ログアウトする
Cookieに保存されているトークンを削除し、サーバーでそのトークンを削除する
`/api/v1/user/logout`
- GET
- レスポンス
```
{
"status": "<status>" // OK,NG
}
```
#### ユーザー情報の変更
`/api/v1/user/changeinfo`
ユーザー情報を変更する
- POST
- パラメーター
```
{
"username": "<ユーザー名>",
"displayname": "<表示名(変更しない場合空白)>",
"avatar": "<ユーザーアイコン(変更しない場合空白)>"
}
```
- レスポンス
```
{
"status": "<status>", // OK,NG
"message": "<失敗したときのメッセージ(日本語)>",
}
```
- 結果例
- 以下の場合、不正なリクエストとして拒否される
- アイコンがbase64でデコードできない場合
- アイコンが画像形式でない場合
#### 自分の情報を取得
`/api/v1/user/getmyinfo`
#### 他のユーザーの情報を取得
`/api/v1/user/getinfo`
他のユーザーの情報を取得する
このAPIは未登録のクライアントにも許可される
- GET
- パラメーター
```
user_id=<ゆーざーいd>
```
* レスポンス
```
{
"displayname": "表示名",
"avatar": "<アイコン>",
"type": "[shop,user]"
}
```
#### 他のユーザーのアイコンを取得
`/api/v1/user/geticon?name=<ユーザー名>`
- GET
- レスポンス
```
画像
```
### 投稿関係
#### 投稿機能
`/api/v1/post/post`
投稿する
このAPIは事業者ユーザーにのみ許可される
- POST
- パラメーター
```
{
"user_id": "<ユーザーID>",
"itemname": "<品目名>",
"quantity": "<数量>",
"price": "<価格>",
"comment": "<コメント>", # 空白可
}
```
- レスポンス
```
{
"status": "[OK, NG]",
"postid": "<投稿ID>",
}
```
#### 投稿削除機能
`/api/v1/post/delete`
投稿を削除する
このAPIは事業者ユーザーにのみ許可される
- POST
- パラメーター
```
考え中
```
- レスポンス
```
考え中
```
#### タイムライン取得
`/api/v1/post/get_timeline`
**現状はPOSTテーブルのデータ全送信、リクエストに必要なデータはなし**
ユーザーのタイムラインを取得する
このAPIは事業者ユーザーにのみ許可される
- GET
- ヘッダー
```
{
"user_id": "<ユーザーid>",
"TL-QUANTITY": "<タイムラインの数(デフォルト:50)>"
}
```
- レスポンス
```
{
"status": "<OK,NG>",
"message": "<失敗時のメッセージ(日本語)>"
"data": {
0: "<投稿ID>",
1: "<投稿ID>",
2: "<投稿ID>",
:
}
}
```
#### 投稿取得
投稿を取得する
`/api/v1/post/get_post`
- GET
- ヘッダー
```
"POSTID": "<投稿ID>"
```
- レスポンス
```
{
"postid": "<投稿ID>"
"username": "<投稿したユーザー名>",
"displayname": "<投稿したユーザーの表示名>",
"avatar": "<アイコン>",
"item": {
"itemname": "<品目名>",
"quantity": "<数量>",
"price": "<価格>",
"comment": "<コメント>",
}
}
```
#### コメントの取得
`/api/v1/post/get_reply?post_id=<ポストid>`
* GET
#### リプライ
`/api/v1/post/reply`
返信する
- POST
- パラメーター
```
{
"user_id": "<ユーザーID>",
"post_id": "<返信したい投稿ID>",
"comment": "<コメント>"
}
```
- レスポンス
```
{
"status": "[OK,NG]",
"message": "<失敗時のメッセージ>",
"replyid": "<投稿された返信ID>"
}
```
#### 検索
`/api/v1/post/search`
検索する
このAPIは未登録のクライアントにも許可される
- POST
- パラメーター
```
{
"type": "<検索方法>",
"query": "<検索クエリ>"
}
```
- レスポンス
```
// タイムラインAPIと同じ
```
- 検索方法
- `keyword`
- キーワードで検索する(「玉ねぎ」「居酒屋」等)
- `place`
- 場所で検索する(座標を指定する)