1. Architecture
Social Tool Documentation
  • Tổng quan
  • Bussiness | Logic
    • Bussiness | Logic
  • Project
    • ADMIN
      • Tổng quan ADMIN
      • Architecture
        • System architecture
        • Code structure
      • Deployment
        • Local
        • Staging
        • Product
      • Hướng dẫn sử dụng
        • Đăng nhập
        • FAQ
        • Mạng xã hội
          • Tài khoản mạng xã hội
          • Nội dung bài viết & bình luận
          • Quản lý liên kết
          • Thư viện hình ảnh
          • Thu thập dữ liệu
        • Hệ thống
          • Quản lý proxy
        • Chiến dịch
          • Tạo & quản lý chiến dịch
          • Đăng nhập tài khoản
          • Check Proxy
          • Join Group
    • API
      • Tổng quan API
      • Architecture
        • System architecture
        • Database schema
        • Code structure
      • Deployment
        • Local
        • Staging
        • Product
      • API Interface
        • 🔑 Identity & Session
          • List users
          • Create user
          • Update info user
          • Update info user
          • List user departments
          • Delete user
          • List user's AI keys
          • Create AI key
          • Get user's active API key
          • Get supported services
          • Get supported AI models
          • Update AI key
          • Delete AI key
          • Get AI key by ID
          • List departments
          • Create department
          • Update department
          • Create department
          • Update department
          • Update department roles
          • Get department roles
          • Update department status
          • Delete department
          • List user sessions
          • Create user session
          • Delete user session
          • Get user sessions by user ID
          • Delete all user sessions
          • Update user session status
          • List user activity logs
          • Create user activity log
          • Get user activity logs
          • Delete user activity logs
          • User login
          • User registration
          • User logout
          • Logout from all devices
          • Refresh access token
          • Create api key
          • Reset password
          • Get current user
          • Get user roles
          • Create role
          • Update role
          • Update role
          • Update role
          • List user permission groups
          • Get user permission group by ID
          • Delete user permission group
          • Create user permission group
          • Update user permission group
          • Get all user permission groups with permissions
        • 🛰️ Proxy & Connectivity
          • List proxies
          • Create proxy
          • Create many proxies
          • Update proxy
          • Delete proxy
          • Get proxy by ID
          • Import proxies from CSV/Excel
          • Check expired proxies
          • Kiểm tra proxy (qua Campaign)
          • Xóa proxy
          • Cập nhật proxy
          • Proxy Group list
          • Create a Proxy Group
          • Get a Proxy Group by ID
          • Update a Proxy Group
          • Delete a Proxy Group
          • Delete a Proxy Group
          • List proxy providers
          • Create proxy provider
          • Update proxy provider
          • Delete proxy provider
          • Get proxy provider by ID
          • Import proxy packages from CSV
          • List proxy packages
          • Create proxy package
          • Update proxy package
          • Delete proxy package
          • Get proxy package by ID
          • Import proxy packages from CSV
        • 📱 Social Management
          • List socials
          • Create social
          • Update social
          • Delete social
          • Get social by ID
          • List social accounts
          • Create social account
          • Create social account
          • Get account tasks
          • Assign proxies to social account
          • Update social account
          • Delete social account
          • Get social account by ID
          • Join social account
          • Cancel social accounts
          • Cancel social accounts
          • Import social accounts from file
          • Get account usage statistics
          • Push cookies manually for specific accounts (via Campaign)
          • Đổi tên nhiều tài khoản (qua Campaign)
          • Đổi mật khẩu nhiều tài khoản (qua Campaign)
          • Đổi ảnh đại diện (qua Campaign)
          • Social Account Group list
          • Create a Social Account Group
          • Get a Social Account Group by ID
          • Create a Social Account Group
          • Delete a Social Account Group
          • List social pages
          • Create social page
          • Update social page
          • Delete social page
          • Get social page by ID
          • Batch update social page status
          • Batch delete social pages
          • Import social pages from file
          • Search social pages
          • Batch delete social pages
          • Social Page Group list
          • Create a Social Page Group
          • Get a Social Page Group by ID
          • Update a Social Page Group
          • Delete a Social Page Group
          • List social actions
          • Create social action
          • Update social type
          • Delete social action
          • Get social type by ID
          • List social pages
          • Create social content
          • Update social content
          • Delete social content
          • Get social content by ID
          • Batch delete social content
          • Import social accounts from file
          • Create a new social content group
          • Get paginated list of social content groups
          • Get social content group by ID
          • Update social content group
          • Soft delete social content group
          • Batch delete social content groups
          • Delete social content group
          • Get groups by social platform ID
          • Social Image list
          • Create a Social Image
          • Get a Social Image by ID
          • Update a Social Image
          • Delete a Social Image
          • Social Collect Data list
          • Create a Social Collect Data
          • Get a Social Collect Data by ID
        • 📁 Campaign Management
          • List campaigns
          • Create campaign
          • Update campaign
          • Delete campaign
          • Get campaign by ID
          • Create campaign platform
          • List campaign platforms
          • Update campaign platform
          • Delete campaign platform
          • Get campaign platform by ID
          • Create campaign platform
          • Create campaign platform
          • Clone campaign platforms
          • Cancel multiple campaign platforms
          • List campaign joins
          • Create campaign platform
          • List campaign joins
          • Update campaign platform
          • Update campaign platform
          • Update campaign platform
          • Update campaign platform
          • List jobs
          • Update job
          • Delete job
          • Get job by ID
          • List campaign platform tasks
          • Create campaign platform task
          • Update campaign platform task
          • Delete campaign platform task
          • Get campaign platform job task by ID
          • List Report Categories
          • Create Report Categories
          • Create Report Categories
          • Create Report Categories
          • List Report Details
          • Create Report Details
          • Create Report Details
          • Create Report Details
    • TOOL
      • Tổng quan TOOL
      • Architecture
        • Database schema
        • System architecture
        • Code structure
      • Deployment
        • Local
        • Staging
        • Product
      • API Interface
        • 🎯 NATS — Task
          • [NATS RPC] Tạo batch Task mới
          • [NATS RPC] Lấy danh sách tất cả Tasks
          • [NATS RPC] Đếm số Task đang chờ xử lý
          • [NATS RPC] Xóa tất cả Tasks
        • 🍪 NATS — Cookie
          • [NATS RPC] Thêm batch Cookie (Auto Login)
          • [NATS RPC] Lấy danh sách tất cả Cookies
          • [NATS RPC] Xóa tất cả Cookies
        • 🌐 NATS — Proxy
          • [NATS RPC] Gửi batch Proxy để kiểm tra
        • 🔗 NATS — TaskJoin
          • [NATS RPC] Tạo lệnh tham gia Group
          • [NATS RPC] Kiểm tra trạng thái tham gia Group
        • 📤 NATS — Callbacks
          • [NATS PUB] Kết quả thực thi Task
          • [NATS PUB] Kết quả Crawl dữ liệu
          • [NATS PUB] Kết quả Auto Login
          • [NATS PUB] Kết quả kiểm tra Proxy
          • [NATS PUB] Kết quả tham gia Group
          • [NATS PUB] Kết quả kiểm tra trạng thái tham gia
        • 📊 HTTP — Logs & Info
          • Service Root — Thông tin Worker
          • Health Check
          • Đọc file log
          • Log hôm nay
          • Log theo ngày cụ thể
          • Danh sách ngày có log
          • Test kết nối ChatGPT
        • 📋 HTTP — Data Query
          • Danh sách Tasks (phân trang + lọc)
          • Xóa tất cả Tasks
          • Danh sách tất cả Cookies
          • Xóa tất cả Cookies
          • Xóa Cookie theo _id
          • Danh sách Proxies (lọc theo task_id)
          • Xóa tất cả Proxies
          • Proxy Checks đang chờ xử lý
          • Proxy Checks đã hoàn thành
          • Xóa Proxy theo _id
          • Danh sách Task Join (phân trang + lọc)
          • Tạo Task Join (HTTP mode)
          • Xóa tất cả Task Join
  • Schemas
    • AIInfo
    • CommentInfo
    • ReplyInfo
    • ShareInfo
    • CaptchaInfo
    • PageInfo
    • SocialAccountInfo
    • ProxyInfo
    • SocialInfo
    • ActionInfo
    • CreateTaskPayload
    • CreateCookiePayload
    • CreateProxyPayload
    • CreateTaskJoinPayload
    • NatsAcceptedResponse
    • NatsRejectedResponse
    • NatsErrorResponse
    • TaskCompletedPayload
    • CookieUpdatePayload
    • ProxyCheckResultPayload
    • TaskJoinResultPayload
    • TaskJoinCheckResultPayload
    • PagingInfo
    • AppError
  1. Architecture

Code structure

Cấu trúc Mã nguồn — Social Tool Worker#

Tài liệu kỹ thuật dành cho Developer tiếp nhận dự án
Phiên bản 1.0 — Cập nhật lần cuối: 2026

🧭 Giới thiệu tài liệu#

Tài liệu này mô tả cấu trúc mã nguồn, quy tắc tổ chức module, pipeline xử lý tác vụ và hướng dẫn debug của Social Tool Worker. Đây là tài liệu dành cho developer cần hiểu cách hệ thống hoạt động để bảo trì hoặc mở rộng.

1. Hệ thống này làm gì?#

Social Tool Worker là automation engine — nhận lệnh từ API Server (qua NATS hoặc HTTP), sau đó:
Lưu task vào MongoDB (queue nội bộ).
Cron engine quét task pending, mở trình duyệt headless Chrome.
Nạp cookie + proxy vào browser, truy cập URL mục tiêu.
Thực hiện hành động (like, comment, share, login...).
Gửi kết quả trở lại API Server.
Điểm mấu chốt: Worker không kết nối trực tiếp vào MySQL của API Server. Mọi giao tiếp đều qua NATS message hoặc HTTP webhook.

2. Cấu trúc thư mục /src#

src/
├── index.ts              ← Entry point: kết nối DB, đăng ký NATS/HTTP, khởi chạy server
│
├── api/                  ← HTTP API controllers (dùng khi USE_NATS=false)
│   ├── chatgpt/          ← API endpoint cho ChatGPT
│   ├── cookie/           ← API cookie management
│   ├── logs/             ← API xem log file
│   ├── proxy/            ← API proxy management
│   └── task/             ← API task management
│
├── nats/                 ← 🔥 Module chính (dùng khi USE_NATS=true)
│   ├── index.ts          ← Đăng ký NATS listeners + Dynamic Worker Allocation
│   ├── config/           ← Hằng số cấu hình (ACTIONS_LIMITS)
│   │
│   ├── task/             ← Module thực thi hành động MXH
│   │   ├── task.model.ts
│   │   ├── task.service.ts
│   │   ├── task.cron.ts
│   │   ├── task.sub.ts
│   │   ├── task.controller.ts
│   │   ├── task.dto.ts
│   │   └── task.mapper.ts
│   │
│   ├── cookie/           ← Module login / lấy cookie
│   │   ├── cookie.model.ts
│   │   ├── cookie.service.ts
│   │   ├── cookie.cron.ts
│   │   ├── cookie.sub.ts
│   │   ├── cookie.controller.ts
│   │   └── cookie.dto.ts
│   │
│   ├── proxy/            ← Module kiểm tra proxy
│   │   ├── proxy.model.ts
│   │   ├── proxy.service.ts
│   │   ├── proxy.cron.ts
│   │   ├── proxy.sub.ts
│   │   ├── proxy.controller.ts
│   │   └── proxy.dto.ts
│   │
│   ├── task_join/        ← Module join group
│   │   ├── task_join.model.ts
│   │   ├── task_join.service.ts
│   │   ├── task_join.cron.ts
│   │   ├── task_join.sub.ts
│   │   ├── task_join.controller.ts
│   │   └── task_join.dto.ts
│   │
│   ├── cookie_proxy/     ← Model lưu lịch sử cookie-proxy
│   │   └── cookie-proxy.model.ts
│   │
│   └── logs/             ← Controller xem log
│       └── logs.controller.ts
│
├── services/             ← Business services bổ sung
│   ├── check-proxy/      ← Logic kiểm tra proxy
│   └── webhook/          ← Logic gửi webhook
│
├── config/               ← Cấu hình hệ thống
│   ├── constants.ts      ← Hằng số global
│   └── database/
│       └── mongodb.config.ts  ← Kết nối MongoDB
│
├── utils/                ← Tiện ích dùng chung
│   ├── browser_manager/  ← Quản lý pool session Puppeteer
│   ├── captcha/          ← Tích hợp dịch vụ giải captcha
│   ├── chat_gpt/         ← Tích hợp OpenAI API
│   ├── concurrency/      ← Mutex, giới hạn concurrent
│   ├── social/           ← Enum nền tảng MXH (SocialType)
│   ├── file/             ← Đọc/ghi file
│   ├── number/           ← Tiện ích số học
│   ├── env.ts            ← Load biến môi trường
│   ├── logger.ts         ← Logger (file + console)
│   ├── nats.ts           ← NATS connection helper
│   ├── cookieUtils.ts    ← Parse/validate cookie
│   ├── extractors.ts     ← Trích xuất dữ liệu từ trang web
│   ├── error.custom.ts   ← Class lỗi tùy chỉnh
│   ├── error.middleware.ts ← Middleware xử lý lỗi
│   ├── telegramNotify.ts ← Gửi thông báo Telegram
│   └── createElysia.ts   ← Factory tạo Elysia instance
│
└── types/                ← TypeScript types
    └── global/           ← Interface & Type toàn cục

3. Quy tắc tổ chức Module#

Mỗi module NATS tuân theo cấu trúc chuẩn gồm 6 file:
FileVai tròKhi nào cần sửa
*.model.tsĐịnh nghĩa Typegoose schema (MongoDB collection)Thêm/sửa trường dữ liệu
*.service.tsLogic nghiệp vụ: query DB, xử lý task, gọi browserThêm logic mới
*.cron.tsCron engine: quét task pending, gọi service xử lýThay đổi tần suất, logic quét
*.sub.tsNATS subscriber: lắng nghe event, lưu task vào DBThêm event mới từ API Server
*.controller.tsHTTP endpoints (Elysia routes)Thêm API mới
*.dto.tsData Transfer Object: validate, transform dữ liệuThay đổi format dữ liệu
⚠️ Lưu ý cho dev mới: Logic nghiệp vụ chỉ nằm trong *.service.ts. Subscriber và Controller chỉ nhận dữ liệu và chuyển tiếp cho Service. Không viết business logic trong subscriber hoặc controller.

4. Pipeline xử lý tác vụ#

4.1. Luồng nhận và thực thi Task#

[NATS Event từ API Server]
        │
        ▼
[*.sub.ts] — Subscriber nhận message
        │  Validate message format
        │  Transform thành document
        ▼
[*.model.ts] — Lưu vào MongoDB (status: PENDING)
        │
        ▼
[*.cron.ts] — Cron quét định kỳ
        │  Lấy batch task PENDING
        │  Nhóm theo user_id (tránh xung đột tài khoản)
        │  Cập nhật status → PROCESSING
        ▼
[*.service.ts] — Xử lý nghiệp vụ
        │  Khởi tạo browser session (Puppeteer)
        │  Nạp cookie + cấu hình proxy
        │  Thực thi hành động trên MXH
        │  Xử lý captcha nếu gặp
        ▼
[Kết quả]
   ├── SUCCESS → Gọi webhook → Xóa task khỏi MongoDB
   └── FAILED  → Ghi log → Retry hoặc gửi lỗi về API Server

4.2. Cron Engine — Processing Flow#

Mỗi cron cycle thực hiện các bước sau:
1.
Lấy danh sách user_id có task pending (tránh xử lý trùng lặp).
2.
Với mỗi user_id, lấy 1 task theo thứ tự ưu tiên.
3.
Kiểm tra concurrent limit (BROWSER_LIMIT).
4.
Mở browser session và thực thi task.
5.
Đánh dấu kết quả và gửi webhook callback.
6.
Đóng browser session để giải phóng tài nguyên.
💡 Tại sao nhóm theo user_id? Để đảm bảo mỗi tài khoản MXH chỉ chạy một task tại một thời điểm, tránh xung đột session trên cùng trình duyệt.

5. Entry Point — src/index.ts#

File này khởi tạo toàn bộ ứng dụng qua 4 bước:
[1] Kết nối MongoDB
        │
        ▼
[2] Tạo Elysia server
    → Đăng ký route cơ bản: /, /health, /logs
        │
        ▼
[3] Chọn chế độ vận hành:
    ├── USE_NATS=true  → registerNatsEvents() (NATS mode)
    └── USE_NATS=false → apiRoutes + Swagger (HTTP mode)
        │
        ▼
[4] Đăng ký HTTP controllers bổ sung
    → taskController, cookieController, logsController
    → proxyController, taskJoinController, chatgptController
        │
        ▼
[5] Khởi chạy server tại PORT

6. Module nats/index.ts — Dynamic Worker Allocation#

File này là bộ não điều phối của Worker ở chế độ NATS. Chức năng chính:
1.
Đăng ký NATS listeners cho 4 module (Task, Cookie, Proxy, TaskJoin).
2.
Reset trạng thái task từ PROCESSING → PENDING khi khởi động (tránh task bị stuck).
3.
Phân bổ worker động dựa trên pending count của từng module.
4.
Tự động tái phân bổ mỗi 120 giây hoặc khi có trigger thủ công.
5.
Graceful shutdown — đợi task đang chạy hoàn thành trước khi dừng cron.

7. Hướng dẫn debug nhanh#

Task bị stuck ở PENDING#

1.
Kiểm tra cron tương ứng có đang chạy không (xem log [CRON]).
2.
Kiểm tra CRON_TASK_LIMIT — có thể tất cả worker đang bận.
3.
Kiểm tra BROWSER_LIMIT — có thể đã đạt giới hạn browser session.
4.
Kiểm tra kết nối MongoDB — connectDatabase() có thành công không.

Task failed liên tục#

1.
COOKIE_ERROR (-5): Cookie đã hết hạn → cần login lại.
2.
CAPTCHA (-3): Gặp captcha → kiểm tra OMO_CAPTCHA_KEY còn hiệu lực.
3.
NOT_FOUND (-2): URL mục tiêu không tồn tại hoặc đã bị xóa.
4.
PROXY_ERROR: Proxy không hoạt động → kiểm tra Proxy Module.

Worker không nhận task mới#

1.
Kiểm tra kết nối NATS: NATS_URL có đúng không.
2.
Kiểm tra NATS_QUEUE_GROUP — phải giống với API Server.
3.
Xem log [NATS] All event listeners registered có xuất hiện không.

Browser session bị leak#

1.
Kiểm tra biến SO_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true trong Docker env.
2.
Xem browserManager.sessionsCount qua endpoint /.
3.
Kiểm tra DEBUG_END_SESSION=true để đảm bảo session được đóng sau task.

8. Quy ước code#

Quy ướcChi tiết
Ngôn ngữTypeScript strict mode
NamingcamelCase cho biến/hàm, PascalCase cho class/enum
ModuleMỗi module NATS gồm 6 file chuẩn (model, service, cron, sub, controller, dto)
LogicBusiness logic chỉ ở *.service.ts
DB AccessChỉ qua Typegoose model, không query raw MongoDB
ErrorDùng class APIError trong utils/error.custom.ts
LoggingDùng logger từ @/utils, không dùng console.log trong production
FormattingPrettier (cấu hình sẵn)
LintingOxLint

Tài liệu được cập nhật lần cuối: 2026. Mọi thắc mắc vui lòng liên hệ đội ngũ kỹ thuật.
Modified at 2026-03-26 03:07:26
Previous
System architecture
Next
Local
Built with