Đăng Ký Người Dùng

Mô Tả Tổng Quan

Tính năng đăng ký người dùng cho phép người dùng mới tạo tài khoản trong hệ thống bằng cách sử dụng đăng ký dựa trên email tiêu chuẩn. Hệ thống xác thực dữ liệu người dùng, tạo tài khoản người dùng, gán vai trò mặc định và tùy chọn gửi thông báo chào mừng. Đây là phương thức đăng ký truyền thống không liên quan đến OAuth hoặc xác thực bên thứ ba.

API: User Registration API

Biểu Đồ Hoạt Động

flowchart TD
    A[Người dùng gửi đăng ký] --> B[Xác thực email, tên, công ty]
    B --> C{Dữ liệu có hợp lệ?}
    C -->|Không| D[Trả về lỗi xác thực]
    C -->|Có| E[Kiểm tra email trùng lặp]
    E --> F{Email có duy nhất?}
    F -->|Không| G[Trả về lỗi email trùng lặp]
    F -->|Có| H[Tạo tài khoản người dùng]
    H --> I[Gán admin]
    I --> J[Trả về phản hồi thành công]
    
    style A fill:#e1f5fe
    style J fill:#c8e6c9
    style D fill:#ffcdd2
    style G fill:#ffcdd2

Biểu Đồ Tuần Tự

Luồng Đăng Ký Tiêu Chuẩn

sequenceDiagram
    participant Client
    participant RegisterController
    participant AuthService
    participant Database
    
    Note over Client,Database: Luồng Đăng Ký Email Tiêu Chuẩn
    
    rect rgb(200, 255, 200)
    Note right of Client: Luồng Thành Công
    
    Client->>RegisterController: POST /api/v1/general/auth/register
    Note over Client,RegisterController: {email, name, companyName}
    
    rect rgb(200, 230, 255)
    Note right of RegisterController: Xác Thực Đầu Vào
    RegisterController->>RegisterController: Xác thực dữ liệu yêu cầu
    end
    
    rect rgb(200, 255, 255)
    Note right of RegisterController: Logic Nghiệp Vụ
    RegisterController->>AuthService: register(email, name, companyName)
    
    AuthService->>Database: Kiểm tra email trùng lặp
    Database-->>AuthService: Email có sẵn
    
    AuthService->>Database: Tạo bản ghi người dùng
    Database-->>AuthService: Người dùng đã tạo
    
    AuthService->>Database: Gán admin
    Database-->>AuthService: Vai trò đã gán
    end
    
    AuthService-->>RegisterController: Người dùng tạo thành công
    RegisterController->>Client: 201 Created + dữ liệu người dùng
    end
    
    rect rgb(255, 200, 200)
    Note right of Client: Xử Lý Lỗi
    rect rgb(255, 230, 230)
    alt Lỗi Xác Thực
        RegisterController->>Client: 422 Validation Error
    else Email Đã Tồn Tại
        Database-->>AuthService: Email tồn tại
        AuthService-->>RegisterController: Xung đột email
        RegisterController->>Client: 409 Conflict
    else Lỗi Cơ Sở Dữ Liệu
        Database-->>AuthService: Lỗi cơ sở dữ liệu
        AuthService-->>RegisterController: Kết quả lỗi
        RegisterController->>Client: 500 Internal Server Error
    end
    end
    end

Các Bước

Bước 1: Gửi Yêu Cầu Đăng Ký

  • Mô tả: Người dùng gửi biểu mẫu đăng ký với email, tên và công ty
  • Yêu cầu: POST /api/v1/general/auth/register
  • Xác thực:
    • Xác thực định dạng email
    • Xác thực các trường bắt buộc (email, name, companyName)
    • Xác thực độ dài tên công ty

Bước 2: Xác Thực Dữ Liệu Đầu Vào

  • Mô tả: Hệ thống xác thực tất cả dữ liệu đầu vào
  • Hành động:
    • Kiểm tra định dạng email bằng quy tắc xác thực Laravel
    • Xác thực độ dài và định dạng tên
    • Xác thực yêu cầu tên công ty

Bước 3: Kiểm Tra Email Trùng Lặp

  • Mô tả: Đảm bảo email chưa được đăng ký
  • Hành động:
    • Truy vấn cơ sở dữ liệu cho email hiện có
    • Trả về lỗi nếu email đã tồn tại

Bước 4: Tạo Tài Khoản Người Dùng

  • Mô tả: Tạo bản ghi người dùng mới trong cơ sở dữ liệu
  • Hành động:
    • Lưu thông tin người dùng
    • Tạo định danh người dùng duy nhất
    • Lưu dữ liệu người dùng với trạng thái hoạt động
    • Đặt is_first_login = true

Bước 5: Gán Vai Trò Mặc Định

  • Mô tả: Gán người dùng vào nhóm mặc định với vai trò phù hợp
  • Hành động:
    • Tạo bản ghi thành viên nhóm
    • Gán admin (nhóm mới)

Bước 6: Trả Về Phản Hồi Thành Công

  • Mô tả: Gửi phản hồi thành công đến khách hàng
  • Phản hồi:
    • Thành công: status 200 với dữ liệu người dùng
    • Bao gồm ID người dùng, tên, email và trạng thái
    • Gửi email với link xác thực tới email đăng ký

Bảng Và Trường Cơ Sở Dữ Liệu Liên Quan

erDiagram
    users {
        bigint id PK "Khóa chính"
        varchar name "Tên đầy đủ của người dùng"
        varchar email UK "Địa chỉ email của người dùng (duy nhất)"
        varchar payment_provider_customer_id "ID khách hàng nhà cung cấp thanh toán"
        tinyint status "Trạng thái người dùng (1: hoạt động, 0: không hoạt động)"
        varchar remember_token "Token ghi nhớ Laravel"
        timestamp created_at "Thời gian tạo"
        timestamp updated_at "Thời gian cập nhật cuối"
        timestamp deleted_at "Thời gian xóa mềm"
        boolean is_first_login "Cờ đăng nhập lần đầu"
    }
    
    groups {
        bigint id PK "Khóa chính"
        varchar name "Tên nhóm"
        text description "Mô tả nhóm"
        bigint created_by FK "Người dùng tạo nhóm"
        timestamp created_at "Thời gian tạo"
        timestamp updated_at "Thời gian cập nhật cuối"
    }
    
    group_members {
        bigint id PK "Khóa chính"
        bigint group_id FK "ID nhóm"
        bigint user_id FK "ID người dùng"
        bigint group_role_id FK "ID vai trò trong nhóm"
        timestamp created_at "Thời gian tạo"
        timestamp updated_at "Thời gian cập nhật cuối"
    }
    
    group_roles {
        bigint id PK "Khóa chính"
        varchar name "Tên vai trò"
        text description "Mô tả vai trò"
        timestamp created_at "Thời gian tạo"
        timestamp updated_at "Thời gian cập nhật cuối"
    }
    
    users ||--o{ group_members : "có"
    groups ||--o{ group_members : "chứa"
    group_roles ||--o{ group_members : "định nghĩa"
    users ||--o{ groups : "tạo"

Xử Lý Lỗi

HTTP Status Error Code Mô Tả
409 EMAIL_ALREADY_EXISTS Địa chỉ email đã được đăng ký
422 UNPROCESSABLE_ENTITY Lỗi xác thực trong dữ liệu yêu cầu
500 INTERNAL_SERVER_ERROR Lỗi máy chủ trong quá trình đăng ký

Ghi Chú Bổ Sung

  • Chỉ Đăng Ký Tiêu Chuẩn: Endpoint này dành riêng cho đăng ký dựa trên email không có OAuth
  • Xác Thực Email: Đảm bảo định dạng email phù hợp và duy nhất
  • Thông Tin Công Ty: Cần thiết cho ngữ cảnh kinh doanh và quản lý nhóm
  • Vai Trò Mặc Định: Người dùng mới được tự động gán vào nhóm mặc định
  • Không Có OAuth: Phương thức đăng ký này không liên quan đến Google, Facebook hoặc các nhà cung cấp OAuth khác
  • Quản Lý Trạng Thái: Người dùng mới được tạo với trạng thái hoạt động theo mặc định
  • Theo Dõi Đăng Nhập Lần Đầu: Người dùng được đánh dấu is_first_login = true cho trải nghiệm đăng nhập lần đầu
  • Bảo Mật: Xác thực dựa trên email tiêu chuẩn với kiểm tra trùng lặp và xác thực dữ liệu