---
# System prepended metadata

title: 第八屆黑客松 API 規格

---

# 第八屆黑客松 API 規格

[TOC]

## 此文件服用方法
:::info
- 參數前有 * 代表必要參數

:accept: <- 若看見此圖示，代表 API 已經上線。
:closed_lock_with_key: <- 看見此圖示，就是需要登入才能使用的 API
:::


## （範例）登入

### （範例）使用者登入 :accept:

`/api/User/Login`

:::spoiler
- 要傳的參數:
    - *`account`: string, 使用者帳號（信箱）
    - *`password`: string, 密碼
    - `keepState`: boolean, 保持登入
- 回傳的內容
    - 登入成功
    ```json=
    {
        "code": 1,
        "message": "Login success.",
        "data": {
          "session_id": "grhch426cc3t8sdfhulga8tggsj0ao3k"
        }
    }
    ```
    - 帳號或密碼錯誤
    ```json=
    {
        "code": 0,
        "message": "Login failed, account or password incorrect.",
        "data": []
    }
  ```
:::

### （範例）獲取個人資訊 :closed_lock_with_key: :accept:

`/api/User/getUserInformation`

:::spoiler
- paramters:
    - None.
- response: 
    - success: 獲取成功
    ```json
    {
        code: 1,
        message: "Success.",
        "data": {
            "name": "222222",
            "mail": "111@gmail.com",
            "account": "11111",
            "total_answered_amount": "0",
            "total_correct_amount": "0",
            "photo_path": null
        }
    }
    ```
:::


## 使用者

### 使用者登入 :accept:

POST `/api/Customer/Login`

:::spoiler
- 要傳的參數:
    - *`account`: string, 使用者帳號
    - *`password`: string, 密碼
- 回傳的內容
    - 登入成功
    ```json=
    {
        "code": 1,
        "message": "成功登入",
        "session": "5tptkh6ljcukpun2kdkvkcdhj64a70un"
    }
    ```
    - 帳號或密碼錯誤
    ```json=
    {
        "message": "您必須提供帳號以及密碼"
    }
    ```
:::

### 使用者註冊 :accept:

POST `/api/Customer/Register`

:::spoiler
- 要傳的參數:
    - *`name`: string, 使用者名稱
    - *`account`: string, 使用者帳號（學號）
    - *`email`: string, 使用者信箱
    - *`phoneNumber`: string, 手機號碼
    - *`password`: string, 密碼
    - *`passwordConfirm`: string, 確認密碼

- 回傳的內容
    - 註冊成功
    ```json=
    {
        "code": 1,
        "message": "Register success."
    }
    ```
    - 註冊失敗
    ```json=
    {
        "code": 0,
        "message": {
            "name": "Name cannot be empty.",
            "account": "Account cannot be empty.",
            "email": "Email cannot be empty.",
            "phoneNumber": "Phone Number cannot be empty.",
            "password": "Password cannot be empty.",
            "passwordConfirm": "Password Confirm cannot be empty."
        }
    }
    ```
:::

### 使用者基本資料顯示 :closed_lock_with_key:

`/api/Customer/setting`

:::spoiler
- 要傳的參數:
    - *`id`: int, 使用者ID

- 回傳的內容
    - 取得成功
    ```json=
    {
        "name": "唯一顧客",
        "account": "n123",
        "email": "ka123@gmail.com",
        "phonenumber": "0922798"
    }
    ```
    - 取得失敗
    ```json=
    {
        "name": [],
        "account": [],
        "email": [],
        "phonenumber": []
    }
    ```
:::

### 使用者基本資料修改 :closed_lock_with_key:

`/api/Customer/settingUpdate`

:::spoiler
- 要傳的參數:
    - *`id`: int, 使用者ID
    - *`email`: string, 使用者信箱
    - *`phonenumber`: string, 使用者電話
    - *`password`: string, 使用者密碼

- 回傳的內容
    - 修改成功
    ```json=
    {
        "code": 1,
        "message": "修改成功"
    }
    ```
    - 修改失敗 (`id`為空|不存在)
    ```json=
    {
        "code": 0,
        "message": "未知錯誤"
    }
    ```
    - 修改失敗 (信箱|電話|密碼為空)
    ```json=
    {
        "code": -1,
        "message": "您必須提供 信箱 \n您必須提供 電話號碼 \n您必須提供 密碼 \n"
    }
    ```
    - 修改失敗 (無效信箱)
    ```json=
    {
        "code": -1,
        "message": "請輸入有效信箱\n"
    }
    ```
    - 修改失敗 (信箱已註冊)
    ```json=
    {
        "code": -1,
        "message": "您輸入的信箱已被註冊過，請重新確認\n"
    }
    ```
    - 修改失敗 (電話號碼大於10數)
    ```json=
    {
        "code": -1,
        "message": "電話號碼 欄位長度錯誤\n"
    }
    ```
    - 修改失敗 (電話欄外輸入數字以外字元)
    ```json=
    {
        "code": -1,
        "message": "電話號碼 只能輸入數字，請重新輸入\n"
    }
    ```
:::

### 將商品加入購物車 :closed_lock_with_key:

`/api/Customer/Order/getMealDetails`

:::spoiler
- 要傳的參數:
    - *`mealId`: int, 餐點 ID

- 回傳的內容
    
:::

## 商家

### 商家登入 :accept:

POST `/api/Store/Login`

:::spoiler
- 要傳的參數:
    - *`email`: string, 使用者帳號（信箱）
    - *`password`: string, 密碼

- 回傳的內容
    - 登入成功
    ```json=
    {
        "code": 1,
        "message": "Success",
        "token": "hnr8516ac5pujv4arv7i45ge7ag5cd71",
        "errors": []
    }
    ```
    - 登入失敗，資料格式不對
    ```json=
    {
        "code": -1,
        "message": "登入失敗，資料格式不對",
        "token": "",
        "errors": {
            "email": "信箱格式不正確",
            "password": "您必須提供密碼"
        }
    }
    ```
    - 帳號或密碼錯誤
    ```json=
    {
        "code": -1,
        "message": "登入失敗，帳號或密碼錯誤",
        "token": "",
        "errors": []
    }
    ```
:::


### 商家註冊 :accept:

POST `/api/Store/Register`

:::spoiler
- 要傳的參數:
    - *`name`: string, 名稱
    - *`email`: string, 信箱
    - *`location`: string, 商店位置
    - *`introdution`: string, 商店簡介
    - *`business_hours`: string, 商店營業時間
    - *`password`: string, 密碼
    - *`passwordConfirm`: string, 確認密碼

- 回傳的內容
    - 註冊成功
    ```json=
    {
        "code": 1,
        "message": "註冊成功",
        "data": {}
    }
    ```
    - 註冊失敗，資料格式不對
    ```json=
    {
        "code": 0,
        "message": {
            "name": "名稱不可留白",
            "email": "email不可留白",
            "location": "地點不可留白",
            "introdution": "介紹不可留白",
            "password": "密碼不可留白",
            "confirmPassword": "密碼不可留白"
        },
        "data": {}
    }
    ```
:::

### 單一店家資訊 :closed_lock_with_key: :accept:

GET `/api/Store/Info`

:::spoiler
- 要傳的參數:
    - *`id`: int, 店家id
- 回傳的內容
    - 取得成功
    ```json=
    {
      "store_name": "teststore",
      "location": "teststore",
      "meals": [
        {
          "meal_name": "test_meal",
          "meal_introduction": "test_meal_introduction",
          "price": "100",
          "photo": "1"
        },
        {
          "meal_name": "test_meal2",
          "meal_introduction": "test_meal_introduction2",
          "price": "200",
          "photo": "2"
        }
      ]
}
    ```
    - 未給予參數
    ```json=
    {
      "code": 0,
      "message": "請給予店家編號"
    }
    ```
    - 編號無法配對店家
    ```json
    {
      "code": 0,
      "message": "查無店家"
    }
    ```
:::

### 單一店家相關評論 :closed_lock_with_key:
POST `api/store/evaluation`

:::spoiler
- 要傳的參數:
    - *`storeId`: int, 店家id
- 回傳的內容
    - 取得成功
    ```json=
    {
  "evaluations": [
        {
          "name": "test_name",
          "stars": "3",
          "comment": "test_comment",
          "time": "2022-09-18 15:40:05"
        },
        {
          "name": "test_name",
          "stars": "4",
          "comment": "test_comment2",
          "time": "2022-09-18 15:40:26"
        }
      ]
    }
    ```
    - 未給予參數
    ```json=
    {      
        "code" => 0,
        "message" => "請給予店家編號", 
    }
    ```
:::

---

## 需要的 APIs

- 店家
    - 獲得所有店家
    - 獲得單一店家資訊
- 購物車
    - 加到購物車
    - 獲得購物車清單
    - 

































<!-- 以下勿動 -->

<style>
    .markdown-body li > span+code {
        color: red !important;
    }

    details {
        border: 1px solid gray;
        border-radius: 10px;
        padding: 15px;
        margin: 5px;
        box-shadow: 5px 5px lightgray;
        cursor: pointer;
    }

    details summary:after {
        content: "詳細資訊";
    }
</style>
