Giới thiệu dự án

Trong kỷ nguyên số hóa toàn diện, mạng xã hội đã trở thành hạ tầng giao tiếp thiết yếu của xã hội hiện đại. Theo số liệu khảo sát tại Việt Nam, Facebook chiếm 93% thị phần người dùng mạng xã hội, tiếp theo là Zalo (55%) và Twitter (45%). Tuy nhiên, một khoảng trống lớn vẫn tồn tại: chưa có nền tảng mạng xã hội nào được xây dựng chuyên biệt cho cộng đồng yêu thú cưng tại Việt Nam, phù hợp với văn hóa và ngôn ngữ bản địa.

Problem Statement: Người dùng Việt Nam phải sử dụng các nền tảng nước ngoài (Facebook, Instagram) không có tính năng định vị cộng đồng địa phương, không hỗ trợ nhắn tin và gọi điện tích hợp trong cùng một luồng nội dung, và thiếu cơ chế kiểm duyệt nội dung phù hợp với chuẩn mực văn hóa Việt.

Mục tiêu đề tài:

  1. Xây dựng nền tảng mạng xã hội WHORU (WHO ARE YOU) đầy đủ tính năng trên kiến trúc REST API
  2. Tích hợp tính năng định vị địa lý (Location-based features) để kết nối người dùng trong phạm vi gần
  3. Cung cấp giao tiếp thời gian thực qua Voice Call và Video Call
  4. Xây dựng hệ thống kiểm duyệt nội dung (Content Moderation) tự động
  5. Triển khai cross-platform trên cả Android và iOS từ một codebase duy nhất

Solution Approach: Nhóm lựa chọn kiến trúc Client-Server với Flutter làm frontend đa nền tảng, ASP.NET Core làm backend RESTful API, và PostgreSQL làm hệ quản trị cơ sở dữ liệu — bộ ba công nghệ cho phép phát triển nhanh, bảo trì dễ dàng và scale linh hoạt.

Expected Outcomes:

  • Ứng dụng hoạt động ổn định trên Android và iOS
  • 97% người dùng khảo sát hài lòng với nền tảng
  • 87% người dùng đánh giá dễ dàng kết nối với người khác
  • 0% báo cáo nội dung không phù hợp (hệ thống kiểm duyệt hoạt động hiệu quả)

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thị trường mạng xã hội Việt Nam:

Nền tảng Thị phần VN Tính năng Location Video Call Open-Source Phù hợp văn hóa VN
Facebook 93% Hạn chế Trung bình
Zalo 55% Tốt
Instagram ~40% Thấp
WHORU Mới Cao

Phân tích yêu cầu theo mô hình MoSCoW:

  • Must Have: Đăng ký/đăng nhập (OTP), đăng bài Feed, bình luận, thích, nhắn tin
  • Should Have: Video Call, Voice Call, theo dõi người dùng (Follow/Unfollow)
  • Could Have: Xem người dùng gần vị trí (Location), gửi ghi chú vị trí (Note on Map)
  • Won't Have (v1): Gợi ý bạn bè bằng AI, hệ thống xếp hạng người dùng

Khoảng trống (Gap Analysis): Không có nền tảng nào trên thị trường kết hợp được cả ba yếu tố: (1) định vị cộng đồng địa phương, (2) giao tiếp thời gian thực tích hợp, (3) phù hợp văn hóa cộng đồng Việt.

Thiết kế hệ thống

Technology Stack:

Tầng Công nghệ Phiên bản Lý do lựa chọn
Frontend Flutter (Dart) 3.x (Dart 2.17+) Cross-platform iOS/Android từ 1 codebase
Backend ASP.NET Core .NET 7/8 High performance, Dependency Injection tích hợp
Database PostgreSQL 15.x Quan hệ mạnh, hỗ trợ JSON, open-source
API Pattern RESTful API HTTP/HTTPS Stateless, cacheable, scalable
Real-time SignalR / WebRTC Chat real-time và Video/Voice Call
Auth OTP qua Gmail Xác thực 2 bước bảo mật

Thiết kế cơ sở dữ liệu — Các entity chính:

-- Entity Users: quản lý tài khoản người dùng
CREATE TABLE Users (
    Id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    Username    VARCHAR(50) UNIQUE NOT NULL,
    Email       VARCHAR(100) UNIQUE NOT NULL,
    PasswordHash TEXT NOT NULL,
    RoleId      INT REFERENCES Roles(Id),
    CreatedAt   TIMESTAMP DEFAULT NOW()
);

-- Entity Feeds: lưu trữ bài đăng
CREATE TABLE Feeds (
    Id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    UserId      UUID REFERENCES Users(Id) ON DELETE CASCADE,
    Status      TEXT,
    IsApproved  BOOLEAN DEFAULT FALSE,
    CreatedAt   TIMESTAMP DEFAULT NOW()
);

-- Entity Locations: hỗ trợ tính năng xem người gần
CREATE TABLE Locations (
    Id          UUID PRIMARY KEY,
    UserId      UUID REFERENCES Users(Id),
    Latitude    DECIMAL(10,8),
    Longitude   DECIMAL(11,8),
    UpdatedAt   TIMESTAMP DEFAULT NOW()
);

Database gồm 16 entity chính: Users, Roles, UserInfos, Follows, Chats, Feeds, FeedImages, Likes, Comments, Shares, Notifications, Stories, SugestionUsers, FaceRecogNumbers, Locations, SavedFeeds.

Kiến trúc MVC (Model-View-Controller):

ASP.NET Core được triển khai theo mô hình MVC kết hợp với RESTful API, trong đó:

  • Model: Entity Framework Core ánh xạ trực tiếp với PostgreSQL
  • Controller: Xử lý HTTP requests (GET, POST, PUT, DELETE)
  • View: Flutter Widget System đóng vai trò presentation layer độc lập

API Design mẫu — Feed Endpoints:

POST   /api/feeds          → Tạo bài viết mới
GET    /api/feeds          → Lấy danh sách Feed (newsfeed)
DELETE /api/feeds/{id}     → Xóa bài viết
POST   /api/feeds/{id}/like     → Thích bài viết
DELETE /api/feeds/{id}/like     → Bỏ thích bài viết
POST   /api/feeds/{id}/comments → Bình luận
POST   /api/feeds/{id}/shares   → Chia sẻ bài viết

Security Considerations:

  • Xác thực OTP qua Gmail trước khi hoàn tất đăng ký
  • Password hashing (không lưu plaintext)
  • JWT Token cho các API call sau khi đăng nhập
  • Kiểm duyệt nội dung bài viết trước khi publish

Methodology

Nhóm áp dụng phương pháp phát triển Agile kết hợp Feature-Driven Development (FDD), chia dự án thành các sprint theo nhóm tính năng:

  • Sprint 1 (Tuần 1–3): Auth system — Đăng ký, đăng nhập, OTP, quên mật khẩu
  • Sprint 2 (Tuần 4–6): Feed system — Đăng bài, thích, bình luận, chia sẻ
  • Sprint 3 (Tuần 7–9): Social features — Follow/Unfollow, Messaging, Notifications
  • Sprint 4 (Tuần 10–12): Advanced features — Voice Call, Video Call, Location Map
  • Sprint 5 (Tuần 13–14): Testing, bug fixing, deployment

Implementation và kết quả

Development Process

Frontend — Flutter Widget Architecture:

Flutter sử dụng mô hình Everything is a Widget, trong đó toàn bộ UI được xây dựng từ cây widget lồng nhau. Một bài viết Feed được render bằng StatefulWidget kết hợp với FutureBuilder để fetch dữ liệu bất đồng bộ từ API:

// Ví dụ: Widget hiển thị danh sách Feed
class FeedListWidget extends StatefulWidget {
  @override
  _FeedListWidgetState createState() => _FeedListWidgetState();
}

class _FeedListWidgetState extends State<FeedListWidget> {
  late Future<List<Feed>> _feedsFuture;

  @override
  void initState() {
    super.initState();
    _feedsFuture = FeedService.getFeeds();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Feed>>(
      future: _feedsFuture,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return ListView.builder(
            itemCount: snapshot.data!.length,
            itemBuilder: (ctx, i) => FeedCard(feed: snapshot.data![i]),
          );
        }
        return CircularProgressIndicator();
      },
    );
  }
}

Tính năng Hot Reload của Flutter cho phép nhóm xem thay đổi UI tức thì mà không cần restart app, giúp tăng tốc độ phát triển ước tính 40–50% so với phát triển native riêng lẻ.

Backend — ASP.NET Core Dependency Injection:

// Program.cs — cấu hình DI Container
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddScoped<IFeedRepository, FeedRepository>();
builder.Services.AddScoped<IFeedService, FeedService>();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options => { /* JWT config */ });

Testing và validation

Kết quả kiểm thử chức năng (Test Cases):

Test Case Kịch bản Kết quả mong đợi Kết quả thực tế Trạng thái
TC-001: Đăng ký Nhập email hợp lệ, nhận OTP Tạo tài khoản thành công ✅ Đúng kỳ vọng PASS
TC-002: Đăng nhập Sai mật khẩu 3 lần Hiển thị thông báo lỗi ✅ Đúng kỳ vọng PASS
TC-003: Đăng bài Upload ảnh + caption Bài xuất hiện trên Feed ✅ Đúng kỳ vọng PASS
TC-004: Bình luận Bình luận vi phạm cộng đồng Từ chối, hiển thị cảnh báo ✅ Đúng kỳ vọng PASS
TC-005: Quên MK OTP hết hạn Yêu cầu gửi lại OTP ✅ Đúng kỳ vọng PASS

User Acceptance Testing (UAT):

  • 92% người dùng đánh giá giao diện "Dễ sử dụng" hoặc "Rất dễ sử dụng"
  • 97% người dùng "Rất hài lòng" với nền tảng WHORU
  • 0% gặp lỗi hoặc sự cố trong quá trình sử dụng
  • 100% không gặp nội dung không phù hợp

Kết quả đạt được

Các tính năng hoàn thành so với kế hoạch (25/25 use cases):

  • ✅ Đăng ký / Đăng nhập (OTP qua Gmail)
  • ✅ Quản lý tài khoản (Avatar, Background, Thông tin cá nhân)
  • ✅ Đăng bài Feed (ảnh, văn bản), Xóa bài
  • ✅ Tương tác bài viết: Thích, Bỏ thích, Bình luận, Chỉnh sửa/Xóa bình luận, Chia sẻ
  • ✅ Hệ thống Follow/Unfollow, xem danh sách Follower/Following
  • ✅ Tìm kiếm người dùng và bài viết
  • ✅ Nhắn tin real-time, Xóa tin nhắn
  • ✅ Voice Call và Video Call
  • ✅ Tính năng vị trí (Location) — xem người dùng xung quanh
  • ✅ Gửi ghi chú lên vị trí (Note on Map)
  • ✅ Lưu bài viết (SavedFeeds)

Đổi mới và đóng góp

Điểm đổi mới so với các nền tảng hiện có:

  1. Location-based Community (Tính năng Vị trí): WHORU cho phép người dùng xem danh sách người dùng khác đang ở gần vị trí của mình theo thời gian thực — tính năng này không có trên Zalo hay Facebook tại Việt Nam với mức độ chi tiết tương đương.

  2. Note on Map: Người dùng có thể "ghim" ghi chú văn bản lên bản đồ tại vị trí hiện tại của họ, tạo ra một lớp giao tiếp địa lý mới — tương tự Dead Drop nhưng dành cho cộng đồng.

  3. Tích hợp Full-Stack Communication: Một nền tảng duy nhất tích hợp cả Text Messaging, Voice Call và Video Call — Zalo có nhưng không có Location; Facebook có Location Check-in nhưng thiếu real-time proximity map.

  4. Content Moderation Pipeline: Bài viết đi qua quy trình duyệt (IsApproved = false mặc định) trước khi xuất hiện trên Feed công khai, giảm thiểu nội dung vi phạm.

So sánh với giải pháp tương đương:

Tiêu chí WHORU Facebook Zalo
Cross-platform (1 codebase) ✅ Flutter ❌ Native riêng ❌ Native riêng
Real-time Location Map
Note on Map
Open Backend (ASP.NET Core) ❌ Proprietary ❌ Proprietary
Content Moderation Partial Partial
OTP Email Auth ❌ (Phone) ❌ (Phone)

Ứng dụng thực tế và triển khai

Môi trường triển khai:

  • Backend: ASP.NET Core chạy trên IIS hoặc self-hosted process, tương thích Windows/Linux/macOS
  • Database: PostgreSQL 15.x (có thể deploy trên cloud như AWS RDS, Azure Database)
  • Frontend: Flutter build ra APK (Android) và IPA (iOS), phân phối qua Google Play / App Store

System Requirements:

  • Server: RAM tối thiểu 2GB, CPU 2 core, SSD 20GB
  • Client Android: Android 6.0+, RAM 2GB
  • Client iOS: iOS 12.0+
  • Kết nối internet cho real-time features (WebRTC cho Call)

Scalability Projections:

Người dùng đồng thời Yêu cầu hạ tầng Giải pháp
< 1,000 1 server, 1 DB Triển khai hiện tại
1,000 – 10,000 Load balancer + 2 servers Horizontal scaling
> 10,000 Microservices + CDN Tách Service (Auth, Feed, Chat)

Target Users:

  • Sinh viên đại học, cộng đồng trẻ (18–30 tuổi)
  • Người yêu thú cưng tại Việt Nam
  • Các nhóm cộng đồng địa phương muốn kết nối theo vị trí

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại:

  • Tính năng gợi ý bạn bè dựa trên sở thích chưa được triển khai do thiếu dữ liệu huấn luyện và thời gian phát triển
  • Hệ thống xếp hạng/đánh giá người dùng chưa có — cần thiết kế thêm cơ chế reputation
  • Video Call chưa được kiểm thử ở mức tải cao (> 100 cuộc gọi đồng thời)
  • Chưa có cơ chế Rate LimitingDDoS Protection trên API layer

Hướng phát triển tương lai:

  1. AI-powered Friend Recommendation sử dụng Collaborative Filtering
  2. Stories Feature (đã có bảng Stories trong DB, chưa implement UI)
  3. Face Recognition (đã có bảng FaceRecogNumbers — nền tảng cho tính năng nhận diện khuôn mặt)
  4. Tích hợp Push Notification (Firebase Cloud Messaging) cho thông báo thời gian thực
  5. Chuyển sang kiến trúc Microservices khi scale lên 10,000+ user

Đối tượng hưởng lợi

  • Sinh viên CNTT: Đây là case study thực tế về việc xây dựng full-stack application với Flutter + ASP.NET Core + PostgreSQL — bộ công nghệ đang được thị trường tuyển dụng ưa chuộng.
  • Nhà phát triển phần mềm: Học được pattern thiết kế RESTful API, MVC architecture, Dependency Injection, và cross-platform development workflow.
  • Startup & Doanh nghiệp: Blueprint cho việc xây dựng nền tảng mạng xã hội nội địa có tính năng Location-based và Real-time Communication với chi phí hạ tầng tối ưu.
  • Nhà nghiên cứu: Phương pháp thiết kế 16-entity database schema cho mạng xã hội và quy trình UAT với metrics định lượng rõ ràng.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật để deploy WHORU? Server tối thiểu: 2GB RAM, Ubuntu 20.04 LTS, .NET 7 Runtime, PostgreSQL 15. Frontend build bằng flutter build apk --releaseflutter build ios --release.

2. Giới hạn scalability và giải pháp? Kiến trúc monolith hiện tại phù hợp đến ~1,000 người dùng đồng thời. Khi vượt ngưỡng, cần tách Auth Service, Feed Service, Chat Service thành các microservice độc lập với message queue (RabbitMQ/Kafka).

3. Tích hợp với hệ thống hiện có? ASP.NET Core cung cấp RESTful API chuẩn JSON, dễ dàng tích hợp với bất kỳ client nào (web, mobile, IoT). Swagger/OpenAPI documentation có thể được bật để auto-generate API docs.

4. Maintenance và support? Cần 1 backend developer bảo trì API, 1 DBA giám sát PostgreSQL. CI/CD pipeline có thể thiết lập với GitHub Actions để tự động deploy khi merge vào branch main.

5. Chi phí triển khai ước tính? VPS cơ bản (~$10–20/tháng) + PostgreSQL managed (~$15/tháng) + domain (~$10/năm) = khoảng $25–35/tháng cho giai đoạn MVP với < 500 người dùng.


Kết luận

Khóa luận tốt nghiệp Mạng xã hội WHORU của nhóm sinh viên Nguyễn Minh Cường và Nguyễn Minh Nhựt (Đại học Sư phạm Kỹ thuật TP.HCM, 2024) đã hoàn thành xuất sắc mục tiêu xây dựng một nền tảng mạng xã hội hoàn chỉnh với bộ công nghệ hiện đại gồm Flutter 3.x + ASP.NET Core (.NET 7/8) + PostgreSQL 15.

Thành tựu nổi bật:

  • Hoàn thành 25 use case như đặc tả, đạt đánh giá Giỏi từ Hội đồng
  • 97% người dùng hài lòng trong khảo sát UAT, 0% lỗi được báo cáo
  • Tính năng Location Map và Note on Map là điểm khác biệt chưa có trên các nền tảng cạnh tranh tại Việt Nam
  • Kiến trúc RESTful API chuẩn hóa cho phép mở rộng sang web client hoặc microservices trong tương lai

Dự án không chỉ là thành quả học thuật mà còn là nền tảng kỹ thuật sẵn sàng cho giai đoạn productionize, với lộ trình rõ ràng tích hợp AI recommendation và Face Recognition trong các phiên bản tiếp theo.

Dành cho nhà phát triển và doanh nghiệp: Nếu bạn đang tìm kiếm kiến trúc tham khảo để xây dựng mạng xã hội nội địa với tính năng real-time và location-based, WHORU là một case study toàn diện từ thiết kế database đến deployment — một blueprint thực tiễn cho thị trường Việt Nam.