---
# System prepended metadata

title: '`POST` /api/followships'
tags: [API-doc]

---

# `POST` /api/followships

## API 功能  
建立追蹤關係紀錄。  
* 只能追蹤自己以外的 user。  

## 邏輯分析(後端看的)  
:::spoiler 運作邏輯
1. 取得 followerId 及 followingId。  
2. 檢查 followerId 及 followingId 不可相同。  
3. 檢查是否已追蹤。  
4. 新建追蹤關係。  
:::

:::spoiler [測試檔(pass)](https://github.com/ritachien/twitter-api-2022/blob/main/test/requests/followship.spec.js#L37-L55)  
:::

:::spoiler 人工測試(6/6)
- [x] 前端提供資料欄位缺失則回傳錯誤訊息。  
- [x] 如果 account/name 和其他 user 相同則回傳錯誤訊息。  
- [x] 註冊完成回傳 user 資料。  
- [x] 回傳資料不可以包含 user 密碼。  
- [x] name 超過 50 字回傳錯誤訊息。  
:::


## 前端傳入資料  
### parameters  
N/A
### req.body  
```json
{
    "name": "user1",
    "account": "user1",
    "email": "user1@example.com",
    "password": "12345678",
    "passwordCheck": "12345678"
}
```

## 後端回傳資料  
### 註冊成功  
```javascript
// status code: 200
{
    "status": "success",
    "message": "Sign up success.",
    "data": {
        "user": {
            "id": 1,
            "name": "user1",
            "account": "user1",
            "role": "user"
        }
    }
}
```
### 傳入資料格式有誤  
發生原因: 檢查後發現任一欄位為空或短少欄位。
```json
// status code: 400
{
    "status": "error",
    "message": "All fields are required."
}
```

發生原因: `name` 欄位超過 50 字元。  
```json
// status code: 400
{
    "status": "error",
    "Field 'name' should be limited within 50 characters."
}
```
### 驗證失敗  
發生原因: 使用一般使用者帳號登入或密碼錯誤。
```javascript
// status code: 401
{
    "status": "error",
    "message": "Account or password incorrect."
}
```




## 相關連結  
* [回首頁](https://hackmd.io/@twitter-2022/index)  
* [API 總表](/Gl56cI2LQ5ObBpmQnbnphw)

###### tags: `API-doc`