Rust WebRTC P2P #12 - User Model + MongoDB Queries
Bài 124:34

Rust WebRTC P2P #12 - User Model + MongoDB Queries

Trong phần này, mình bắt đầu xây dựng Data Layer cho hệ thống, bao gồm User Model và các truy vấn MongoDB. Đây là nền tảng quan trọng để triển khai Login và Authentication cho cả REST API và WebSocket server.

1. Nội dung chính:

Định nghĩa User Model: Xây dựng struct User và UserStatus trong Rust, mapping trực tiếp với document trong MongoDB.
Thiết kế dữ liệu: Bao gồm các field như ID, Username, Email, Password, Phone number... để quản lý user một cách rõ ràng.
Xây dựng User Repository: Triển khai các hàm truy vấn dữ liệu như get_user_by_id, get_all_users và search_user_by_keyword.

2. Cấu trúc dữ liệu

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum UserStatus {
    Pending,
    Active,
    Inactive,
    Locked,
    Suspended,
    Deleted,
}

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct User {
    pub id: String,
    pub network: String,
    pub username: String,
    pub email: String,
    pub password: String,
    pub first_name: String,
    pub last_name: String,
    pub phone_number: Option<String>,
    pub language_code: Option<String>,
    pub time_zone: Option<String>,
    pub date_format: Option<u8>,
    pub time_format: Option<u8>,
    pub number_format: Option<u8>,
    pub photo_url: Option<String>,
    pub created_at: Option<i64>,
    pub updated_at: Option<i64>,
    pub current_balance: f64,
    pub status: Option<UserStatus>,
}

3. Bản ghi database

{ 
    "_id" : ObjectId("68792e60c9ea0a3b0b56f141"), 
    "id" : "7dZdmdweeEQpnRCfmo0Q", 
    "network" : "web", 
    "username" : "[email protected]", 
    "email" : "[email protected]", 
    "password" : "$argon2id$v=19$m=19456,t=2,p=1$aWmfMcPDyuxzbKt0bnXcQg$wMeYKsojeyCZJgr9ADXH/Mz0Rjs36RLDWly1wQX+hLE", 
    "first_name" : "Heo", 
    "last_name" : "Lười Biếng", 
    "language_code" : "en", 
    "photo_url" : "https://avatar.bytebuffer.co/heo-luoi-bieng.jpg", 
    "created_at" : NumberLong(1752772192881), 
    "updated_at" : NumberLong(1752772192881), 
    "current_balance" : 0.0
}

4. Kết quả

Sau phần này, bạn sẽ có một Data Layer hoàn chỉnh, code rõ ràng, dễ maintain và sẵn sàng tích hợp JWT Authentication ở bước tiếp theo.

Khóa học thực chiến giúp bạn xây dựng từ đầu một Signaling Server bằng Rust, xử lý các cuộc gọi audio/video trực tiếp giữa hai trình duyệt thông qua WebRTC Peer-to-Peer mà không cần Media Server. Bạn sẽ nắm vững kiến trúc WebRTC signaling, cách trao đổi SDP Offer/Answer và ICE Candidates giữa các peer thông qua WebSocket. Khóa học sử dụng Axum + Tokio cho backend, MongoDB để lưu trữ dữ liệu, và JWT để xác thực người dùng. Đây là Phần 1 trong series 7 phần về Lập trình Rust với VoIP, bao gồm: WebRTC P2P, Media Server (Janus, LiveKit, Kurento, Asterisk, FreePBX), và hệ thống CRM/Queue/nhạc chờ/chuyển tiếp cuộc gọi. Yêu cầu tiên quyết: Kiến thức cơ bản về Rust (Ownership, Lifetimes, Traits, Async/Await).

Công nghệ sử dụng

RustWebRTCVoIPP2PAxumTokioWebSocketMongoDBJWT

Tác giả

ByteBuffer

ByteBuffer

Coder cỏ tại DTS Group và IPA Solutions

Chuyên gia về Rust và hệ thống VoIP/WebRTC. Nhiều năm kinh nghiệm xây dựng các hệ thống real-time communication với hiệu năng cao và độ trễ thấp.