# API tiếp nhận khách hàng từ Landing Page

## 1. Thông tin API

```text
Method: POST
Endpoint: /api/Contact/ReceiveData/sc/{id}
Authentication: Không yêu cầu
Content-Type: application/json
```

### Path parameter

| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| `id` | Integer | Có | ID của nguồn tiếp nhận khách hàng (`Source`) |

## 2. Request body

| Trường | Kiểu dữ liệu | Bắt buộc | Mô tả |
|---|---|---|---|
| `name` | String | Có | Tên khách hàng |
| `phone` | String | Có | Số điện thoại khách hàng |
| `message` | String hoặc Array | Không | Nội dung khách hàng gửi từ Landing Page |

### Ví dụ request với `message` là chuỗi

```json
{
  "name": "Nguyễn Văn A",
  "phone": "0901234567",
  "message": "Tôi muốn được tư vấn dịch vụ"
}
```

### Ví dụ request với `message` là mảng

```json
{
  "name": "Nguyễn Văn A",
  "phone": "0901234567",
  "message": [
    "Dịch vụ quan tâm: Chăm sóc da",
    "Khung giờ liên hệ: Buổi sáng"
  ]
}
```

Khi `message` là mảng, hệ thống nối các phần tử bằng ký tự `||`.

Ví dụ:

```text
Dịch vụ quan tâm: Chăm sóc da||Khung giờ liên hệ: Buổi sáng
```

## 3. Response thành công

### HTTP `200 OK`

Khách hàng được tạo thành công:

```json
{
  "code": 200,
  "messages": "SUCCESS"
}
```

Sau khi tạo thành công, hệ thống sẽ:

- Tạo thông tin khách hàng.
- Gán nguồn Landing Page.
- Gán chi nhánh và nhân viên phụ trách.
- Gán khách hàng vào các nhóm đã cấu hình cho Source.
- Tạo mã khách hàng theo định dạng `KH{id}`.
- Chuyển vị trí phân chia khách hàng sang nhân viên tiếp theo.

## 4. Response lỗi

### Khách hàng đã tồn tại

HTTP `409 Conflict`

Điều kiện: đã có khách hàng mang cùng số điện thoại.

```json
{
  "code": 409,
  "messages": "Khách hàng đã tồn tại"
}
```

### Không tìm thấy nguồn tiếp nhận

Điều kiện xảy ra:

- Không tồn tại Source tương ứng với `{id}`; hoặc
- Source chưa được phép nhận dữ liệu (`accept` rỗng).

```json
{
  "code": 404,
  "messages": "Nguồn kết nối hết hạn hoặc không tồn tại"
}
```

> Theo code hiện tại, trường hợp này trả HTTP `200 OK`, mặc dù `code` trong JSON là `404`. Nên sửa HTTP status thành `404 Not Found`.

### Thiếu tên hoặc số điện thoại

HTTP `400 Bad Request`

Điều kiện: `name` hoặc `phone` không được truyền lên hoặc có giá trị rỗng.

```json
{
  "code": 400,
  "messages": "Vui lòng nhập cả tên và SĐT"
}
```

### Lỗi trong quá trình xử lý

HTTP `401 Unauthorized`

```json
{
  "code": 401,
  "messages": "Nội dung lỗi"
}
```

> Theo code hiện tại, mọi exception đều trả `401`. Khuyến nghị đổi thành HTTP `500 Internal Server Error`, vì `401` chỉ phù hợp với lỗi xác thực.

Response khuyến nghị:

```json
{
  "code": 500,
  "messages": "INTERNAL SERVER ERROR"
}
```

## 5. Tổng hợp response code

| HTTP status hiện tại | JSON `code` | Trường hợp |
|---:|---:|---|
| `200` | `200` | Tạo khách hàng thành công |
| `409` | `409` | Số điện thoại khách hàng đã tồn tại |
| `200` | `404` | Source không tồn tại hoặc không được phép nhận dữ liệu |
| `400` | `400` | Thiếu `name` hoặc `phone` |
| `401` | `401` | Có exception trong quá trình xử lý |

## 6. Ví dụ cURL

```bash
curl --request POST 'https://your-domain.com/api/Contact/ReceiveData/sc/1' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Nguyễn Văn A",
    "phone": "0901234567",
    "message": "Tôi muốn được tư vấn dịch vụ"
  }'
```
