> ## Documentation Index
> Fetch the complete documentation index at: https://tomotek.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# US-ADM-03: Admin phê duyệt và gửi lời mời cho Merchant/Clinic

> Quy trình Admin kiểm tra và gửi lời mời kích hoạt tài khoản cho các Đối tác (Merchant/Clinic) qua Email.

## 1. Mục tiêu (Objective)

Là một Admin, tôi muốn kiểm tra sự tồn tại của Email và gửi lời mời kích hoạt cho Đối tác mới (Merchant/Clinic), để đảm bảo thông tin chính xác và tránh trùng lặp tài khoản Merchant trên hệ thống.

## 2. Tiêu chí chấp nhận (Acceptance Criteria)

> **US-ADM-03.1: Kiểm tra trùng lặp (Đã là Merchant)**
>
> Khi Admin nhập Email để gửi lời mời, hệ thống sẽ truy vấn DB & Redis:
> Nếu Email đã được gắn với Role `MERCHANT`, hệ thống trả về thông báo lỗi: **"Email này đã có tài khoản Merchant hoạt động"** và chặn không cho gửi lời mời.

> **US-ADM-03.2: Tạo dữ liệu tạm thời (Redis)**
>
> Khi Admin xác nhận gửi lời mời thành công:
>
> * Hệ thống sinh Link kích hoạt (có chứa token bảo mật trên URL) và gửi về Email của Merchant.
> * Lưu thông tin trạng thái mời (Email, Token trên URL, Thông tin Merchant/Clinic) vào bộ đệm Redis.
> * **Thời gian sống (TTL)** của dữ liệu mời là **1 tuần**.

> **US-ADM-03.3: Merchant/Clinic kích hoạt tài khoản**
>
> Khi nhận được email, để kích hoạt tài khoản thành công, người dùng cần đáp ứng các điều kiện sau:
>
> * Truy cập Link kích hoạt khi chưa hết hạn (trong vòng 1 tuần).
> * Tại trang kích hoạt, nhập lại chính xác email và thiết lập mật khẩu mới.

> **US-ADM-03.4: Thông báo thông qua SĐT (Tùy chọn)**
>
> Bộ phận CSKH hỗ trợ gọi điện thông báo cho Merchant hoặc thông báo qua Zalo để họ nắm được thông tin. (Bước này có thể có hoặc không vì hệ thống đã tự động gửi email).

## 3. Hệ thống xác nhận lại tài khoản (US-ADM-03.5)

Trong quá trình đối tác nhấn vào link kích hoạt, hệ thống sẽ thực hiện kiểm tra:

1. **Kiểm tra hiệu lực:** Kiểm tra lại thời hạn của link và thông tin đã lưu trong Redis (đảm bảo còn trong vòng 1 tuần).
2. **Kiểm tra định danh:** Kiểm tra email này đã tồn tại ở Role nào trên hệ thống hay chưa:
   * Nếu là **User bình thường**: Cấp thêm quyền Merchant, cập nhật lại mật khẩu theo mật khẩu mới vừa nhập và tạo mới hồ sơ Merchant.
   * Nếu **Chưa từng xuất hiện** trên hệ thống: Tạo mới hoàn toàn User và tạo mới hồ sơ Merchant.

## 4. Workflow Diagram (Luồng Gửi & Kích hoạt Lời mời)

```mermaid theme={null}
sequenceDiagram
    actor Admin
    participant System as System (API/DB)
    participant Redis as Cache (Redis)
    participant Email as Email Service
    actor Merchant as Merchant/Clinic
    
    Admin->>System: Nhập Email và gửi lời mời
    System->>System: Kiểm tra DB/Redis (Role MERCHANT?)
    
    alt Đã tồn tại MERCHANT
        System-->>Admin: Lỗi "Email đã có tài khoản hoạt động"
    else Chưa tồn tại
        System->>System: Sinh Link kích hoạt kèm Token
        System->>Redis: Lưu [Email, Token, Info] với TTL = 1 tuần
        System->>Email: Trigger gửi Email chứa Link
        Email-->>Merchant: Nhận Email lời mời
    end
    
    Merchant->>System: Truy cập Link kích hoạt
    System->>Redis: Kiểm tra hiệu lực Link (Token, TTL)
    
    alt Link hết hạn hoặc không hợp lệ
        System-->>Merchant: Báo lỗi Link hết hạn
    else Link hợp lệ
        Merchant->>System: Nhập Email xác nhận & Mật khẩu mới
        System->>System: Kiểm tra Role hiện tại của Email
        alt Đã là User
            System->>System: Cấp thêm Role MERCHANT + Đổi Mật khẩu
        else Chưa là User
            System->>System: Tạo User mới + Gán Role MERCHANT
        end
        System->>System: Tạo mới hồ sơ Merchant
        System-->>Merchant: Thông báo kích hoạt thành công!
    end
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.