# 限時取餐 Meal Time - API 文件 ## URL Path Documentation ### Root Path: `http://meal-time-api.herokuapp.com` 所有 api 區分成六個類別: * /users * /vendors * /products * /orders * /messages * /faqs ### [使用者 User](#User) - `page` 頁數,預設為 1 - `limit` 查詢筆數 - `sort` 依...排序,預設為 'id' - `order` 正序/反序,預設為 'DESC',另可輸入 'ASC' | 說明 | Method | Path | 權限驗證 | | -------------------- | ----- | ------------------- | ------- | | 註冊使用者 | POST | /users/register | 無 | | 登入使用者 | POST | /users/login | 無 | | 取得自己的使用者資料 | GET | /users/profile/me | 會員 | | 修改自己的使用者資料 | PATCH | /usersprofile/me | 會員 | | 修改自己的密碼 | PATCH | /users/password | 會員 | | 取得單一使用者資料 | GET | /users/profile/:id | 管理員 | | 修改單一使用者資料 | PATCH | /users/profile/:id | 管理員 | | 取得所有使用者資料 | GET | /users/profile | 管理員 | | 更改使用者權限 | PATCH | /users/auth/:id | 管理員 | ### [賣家 Vender](#Vendor) | 說明 | Method | Path | 權限驗證 | | ----------------- | ------ | ------------------ | ------- | | 註冊賣家 | POST | /vendors/register | 會員 | | 取得自己的賣家資料 | GET | /vendors/profile/me | 賣家 | | 修改自己的賣家資料 | PATCH | /vendors/profile/me | 賣家 | | 取得有效單一賣家資料 | GET | /vendors/profile/:id| 無 | | 取得單一賣家資料 | GET | /vendors/admin/profile/:id| 管理員 | | 取得所有有效賣家資料 | GET | /vendors/profile | 無 | | 取得所有賣家資料 | GET | /vendors/admin/profile | 管理員 | | 修改單一賣家資料 | PATCH | /vendors/profile/:id| 管理員 | | 修改自己的營業狀態 | PATCH | /vendors/set-open | 賣家 | | 修改單一賣家權限 | PATCH | /vendors/auth/:id | 管理員 | ### [賣場分類 Vendor Category](#Vendor-Category) | 說明 | Method | Path | 權限驗證 | | ---------------- | ------ | -------------- | ------- | | 取得所有賣場分類 | GET | /vendor-categories | 無 | | 取得單一賣場分類 | GET | /vendor-categories/:id | 管理員 | | 新增賣場分類 | POST | /vendor-categories | 管理員 | | 編輯賣場分類 | PATCH | /vendor-categories/:id | 管理員 | | 刪除賣場分類 | DELETE | /vendor-categories/:id | 管理員 | ### [產品分類 Product Category](#Category) | 說明 | Method | Path | 權限驗證 | | ---------------- | ------ | -------------- | ------- | | 取得所有賣場分類 | GET | /products-categories | 無 | | 新增賣場分類 | POST | /products-categories | 管理員 | | 編輯賣場分類 | PATCH | /products-categories/:id | 管理員 | | 刪除賣場分類 | DELETE | /products-categories/:id | 管理員 | ### [產品 Product](#Product) 「取得分頁商品」、「取得該分類商品」、「取得該賣家商品」、「取得搜尋商品結果」可加入以下 query string 參數: - `page` 頁數,預設為 1 - `limit` 查詢筆數,預設為 10 - `sort` 依...排序,預設為 'id',另可輸入 'price'、'quantity'、'manufactureDate'、'expiryDate' - `order` 正序/反序,預設為 'DESC',另可輸入 'ASC' - `keyword` 搜尋關鍵字(僅限取得搜尋商品結果) - `category` 篩選分類,可輸入分類 id - `notSupplied` 是否篩選掉過期與售罄的商品,參數 'true' 為檢視,預設為不檢視 - `filter` 賣家管理商品可帶此參數,可輸入 'all'、'available '、'unavailable'、'expiry'、'soldOut',預設為 'all' + 'all' 全部商品 + 'available' 供應中商品(不包含過期與完售) + 'unavailable' 未供應 + 'expiry' 過期商品(包含過期且完售) + 'soldOut' 完售商品(包含過期且完售) | 說明 | Method | Path | 權限驗證 | | -------------------- | ------ | ---------------------- |:-------- | | 取得分頁商品 | GET | /products | 無 | | 取得該分類商品 | GET | /products/category/:id | 無 | | 取得該賣家商品 | GET | /products/vendor/:id | 無 | | 取得搜尋商品結果 | GET | /products/search | 無 | | 取得單ㄧ商品詳細資料 | GET | /products/:id | 無 | | 新增商品 | POST | /products/ | 賣家 | | 編輯商品 | PATCH | /products/:id | 賣家 | | 刪除商品 | DELETE | /products/:id | 賣家 | | 取得賣家管理商品列表 | GET | /products/vendor/manage/:id | 賣家 | | 取得購物車資料 | POST | /cart | 無 | ### [訂單 Order](#Order) 「取得訂單列表」、「取得自己買的訂單列表」、「取得自己賣的訂單列表」可加入以下 query string 參數: - `page` 頁數,預設為 1 - `limit` 查詢筆數,預設為 10 - `sort` 依...排序,預設為 'id',另可輸入 'totalPrice'、'totalQuantity' - `order` 正序/反序,預設為 'DESC',另可輸入 'ASC' - `status` 已完成 'completed'、未完成 'uncompleted'、已取消 'canceled',預設為所有 - `clientId` 依 id 查詢買家所買的商品(限「取得自己買的訂單列表」且身分為管理員) - `vendorId` 依 id 查詢賣家所賣的商品(限「取得自己賣的訂單列表」且身分為管理員) | 說明 | Method | Path | 權限驗證 | | -------------------- | ------ | -------------------- | --- | | 取得訂單列表 | GET | /orders | 管理員 | | 取得自己買的訂單列表 | GET | /orders/buy | 會員 | | 取得自己賣的訂單列表 | GET | /orders/sell | 賣家 | | 取得單一訂單明細 | GET | /orders/:id | 會員 | | 成立訂單 | POST | /orders | 會員 | | 訂單完成 | PATCH | /orders/complete/:id | 會員 | | 訂單取消 | PATCH | /orders/cancel/:id | 會員 | | 刪除訂單 | DELETE | /orders/:id | 管理員 | ### [訊息 Message](#Message) | 說明 | Method | Path | 權限驗證 | | ---------------------- | ----- | ---------------------------- | ------- | | 使用者取得所有與賣家的訊息 | GET | /messages/user | 會員 | | 使用者取得與單一賣家的訊息 | GET | /messages/user/:id | 會員 | | 賣家取得所有與使用者的訊息 | GET | /messages/vendor | 賣家 | | 賣家取得與單一使用者的訊息 | GET | /messages/vendor/:id | 賣家 | | 使用者向賣家傳送訊息 | POST | /messages/user/:id | 會員 | | 賣家向使用者傳送訊息 | POST | /messages/vendor/:id | 賣家 | | 使用者取得與管理員的訊息 | GET | /messages-to-admin | 會員 | | 使用者向管理員傳送訊息 | POST | /messages-to-admin | 會員 | | 管理員取得所有與使用者的訊息 | GET | /messages-to-admin/admin | 管理員 | | 管理員取得與單一使用者的訊息 | GET | /messages-to-admin/admin/:id | 管理員 | | 管理員向使用者傳送訊息 | POST | /messages-to-admin/admin/:id | 管理員 | | 使用者向管理員傳送檢舉訊息 | POST | /report-messages | 會員 | | 管理員取得所有檢舉訊息 | GET | /report-messages/admin | 管理員 | | 管理員取得單一檢舉訊息 | GET | /report-messages/admin/:id | 管理員 | ### [常見問題 FAQ](#FAQ) | 說明 | Method | Path | 權限驗證 | | ---------------- | ------ | ----------------- | ------- | | 取得所有常見問題 | GET | /faqs | 無 | | 取得單一常見問題 | GET | /faqs/:id | 管理員 | | 新增常見問題 | POST | /faqs | 管理員 | | 編輯常見問題 | PATCH | /faqs/:id | 管理員 | | 刪除常見問題 | DELETE | /faqs/:id | 管理員 | ### [常見問題分類 FAQ Category](#FAQ-Category) | 說明 | Method | Path | 權限驗證 | | ---------------- | ------ | -------------- | ------- | | 取得所有問題分類 | GET | /faq-categories | 無 | | 取得單一問題分類 | GET | /faq-categories/:id | 管理員 | | 新增問題分類 | POST | /faq-categories | 管理員 | | 編輯問題分類 | PATCH | /faq-categories/:id | 管理員 | | 刪除問題分類 | DELETE | /faq-categories/:id | 管理員 | ## API Details & Examples 需要身份驗證的 API,使用者登入後會拿到一組 toke, 需在 headers 帶上 token: `Authorization: 'Bearer <token>'`。 > 若註冊成賣家後會再拿到另一組更新 vendorId 的 token,需要更新 headers。 需要上傳圖片的 API,data 需以 `FormData` 格式傳入: ```javascript fetch(url, { method: 'POST', headers: { Authorization: 'Bearer <token>' }, body: formData }) ``` 其餘則以 `JSON` 格式,要帶上 content-type。例: ```javascript fetch(url, { method: 'POST', headers: { Authorization: 'Bearer <token>', 'content-type': 'application/json' }, body: JSON.stringify({ username, password, }) }) ``` ### [User](https://hackmd.io/@meal-time/Bk6t9GVVK) ### [Vendor](https://hackmd.io/@meal-time/HJmWsf4Vt) ### [Vendor-Category](https://hackmd.io/@meal-time/Sk-4nMNVt) ### [Product-Category](https://hackmd.io/@meal-time/Hk0f-8rNF) ### [Product](https://hackmd.io/@meal-time/BJjwILHEF) ### [Order](https://hackmd.io/@meal-time/ry9a8IS4t) ### [Message](https://hackmd.io/@meal-time/rJyYnMN4t) ### [FAQ](https://hackmd.io/@meal-time/SJ_4TGN4Y) ### [FAQ-Category](https://hackmd.io/@meal-time/HkG2pz44F)