Files
pos-system/services/mission-service-net/docs/vi

Mission Service .NET

EN: Mission & Task gamification service for GoodGo Platform.
VI: Dịch vụ gamification Mission & Task cho GoodGo Platform.

Tổng Quan

Mission Service quản lý các nhiệm vụ (missions) và tác vụ (tasks) gamification, cho phép người dùng kiếm phần thưởng thông qua các hoạt động trên nền tảng GoodGo.

Tính Năng Chính

Tính Năng Mô Tả
🎬 Xem Video Kiếm thưởng bằng cách xem video - Pay per view
💰 Pay Per Click Kiếm điểm bằng cách nhấn quảng cáo/liên kết
📤 Pay Per Upload Được thưởng khi tải lên nội dung UGC
👥 Mời Bạn Bè Kiếm bonus khi bạn hoàn thành nhiệm vụ
📅 Điểm Danh Hàng Ngày Điểm danh với thưởng streak
❤️ Tương Tác Xã Hội Like, Share, Subscribe kênh mạng xã hội

Thiết Kế Kiến Trúc

Kiến Trúc Hệ Thống

%%{init: {'theme':'dark'}}%%
graph TD
    subgraph Gateway["🌐 API Gateway"]
        Traefik[Traefik]
    end
    
    subgraph Mission["📋 Mission Service"]
        API[Tầng API]
        Domain[Tầng Domain]
        Infra[Tầng Infrastructure]
    end
    
    subgraph External["🔗 Dịch Vụ Liên Quan"]
        IAM[IAM Service]
        Wallet[Wallet Service]
        Mining[Mining Service]
        Social[Social Service]
        Storage[Storage Service]
    end
    
    subgraph Data["💾 Tầng Dữ Liệu"]
        DB[(PostgreSQL)]
        Redis[(Redis)]
        RabbitMQ[RabbitMQ]
    end
    
    Traefik --> API
    API --> Domain
    Domain --> Infra
    Infra --> DB
    Infra --> Redis
    Infra --> RabbitMQ
    
    Mission <--> IAM
    Mission --> Wallet
    Mission <--> Mining
    Mission <--> Social
    Mission <--> Storage
    
    style Gateway fill:#3498DB,color:#ECF0F1,stroke:#2980B9,stroke-width:2px
    style Mission fill:#8E44AD,color:#ECF0F1,stroke:#7D3C98,stroke-width:3px
    style External fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
    style Data fill:#E67E22,color:#ECF0F1,stroke:#D35400,stroke-width:2px

Cấu Trúc Clean Architecture

mission-service-net/
├── src/
│   ├── MissionService.API/               # Tầng API
│   │   ├── Controllers/
│   │   │   ├── MissionsController.cs     # Quản lý mission
│   │   │   ├── TasksController.cs        # Thực thi task
│   │   │   ├── CheckInController.cs      # Điểm danh
│   │   │   └── RewardsController.cs      # Nhận thưởng
│   │   └── Application/
│   │       ├── Commands/                 # Thao tác ghi
│   │       ├── Queries/                  # Thao tác đọc
│   │       └── IntegrationEvents/        # Sự kiện tích hợp
│   │
│   ├── MissionService.Domain/            # Tầng Domain
│   │   ├── AggregatesModel/
│   │   │   ├── MissionAggregate/         # Định nghĩa mission
│   │   │   ├── TaskAggregate/            # Thực thi task
│   │   │   ├── CheckInAggregate/         # Điểm danh
│   │   │   └── RewardAggregate/          # Theo dõi thưởng
│   │   ├── Events/                       # Domain events
│   │   └── Services/                     # Domain services
│   │
│   └── MissionService.Infrastructure/    # Tầng Infrastructure
│       ├── EntityConfigurations/         # EF Core mappings
│       ├── Repositories/                 # Truy cập dữ liệu
│       └── ExternalServices/             # API clients
│
├── tests/
├── docs/
└── Dockerfile

Domain Model

Các Aggregate Chính

%%{init: {'theme':'dark'}}%%
classDiagram
    class Mission {
        +Guid Id
        +string Code
        +LocalizedString Title
        +MissionType Type
        +MissionReward Reward
        +FrequencyType Frequency
        +MissionStatus Status
        +Activate()
        +Pause()
        +ValidateCompletion()
    }
    
    class UserTask {
        +Guid Id
        +Guid UserId
        +Guid MissionId
        +TaskStatus Status
        +TaskProgress Progress
        +TaskEvidence Evidence
        +Start()
        +UpdateProgress()
        +Complete()
        +ClaimReward()
    }
    
    class UserCheckIn {
        +Guid Id
        +Guid UserId
        +int CurrentStreak
        +int LongestStreak
        +DateOnly LastCheckInDate
        +CheckIn()
        +GetStreakBonus()
    }
    
    Mission "1" --> "*" UserTask : tạo ra
    UserTask --> UserCheckIn : có thể kích hoạt

Các Loại Mission

%%{init: {'theme':'dark'}}%%
flowchart LR
    subgraph Types["📋 Loại Mission"]
        Video["🎬 Xem Video"]
        Click["💰 Pay Per Click"]
        Upload["📤 Pay Per Upload"]
        Invite["👥 Mời Bạn Bè"]
        CheckIn["📅 Điểm Danh"]
        Social["❤️ Tương Tác XH"]
    end
    
    style Video fill:#E74C3C,color:#ECF0F1,stroke:#C0392B,stroke-width:2px
    style Click fill:#3498DB,color:#ECF0F1,stroke:#2980B9,stroke-width:2px
    style Upload fill:#9B59B6,color:#ECF0F1,stroke:#8E44AD,stroke-width:2px
    style Invite fill:#2ECC71,color:#ECF0F1,stroke:#27AE60,stroke-width:2px
    style CheckIn fill:#F39C12,color:#ECF0F1,stroke:#E67E22,stroke-width:2px
    style Social fill:#E91E63,color:#ECF0F1,stroke:#C2185B,stroke-width:2px

Hệ Thống Điểm Danh Hàng Ngày

🔥 Thưởng Streak

%%{init: {'theme':'dark'}}%%
flowchart LR
    subgraph Streak["📅 Các Cấp Streak"]
        D1["Ngày 1-6<br/>2 MP"] --> D7["Ngày 7<br/>🎁 +20 MP"]
        D7 --> D14["Ngày 14<br/>🎁 +35 MP"]
        D14 --> D21["Ngày 21<br/>🎁 +50 MP"]
        D21 --> D30["Ngày 30<br/>👑 +100 MP"]
    end
    
    style D1 fill:#7F8C8D,color:#ECF0F1,stroke:#5D6D7E,stroke-width:2px
    style D7 fill:#3498DB,color:#ECF0F1,stroke:#2980B9,stroke-width:2px
    style D14 fill:#8E44AD,color:#ECF0F1,stroke:#7D3C98,stroke-width:2px
    style D21 fill:#E67E22,color:#ECF0F1,stroke:#D35400,stroke-width:2px
    style D30 fill:#C0392B,color:#ECF0F1,stroke:#A93226,stroke-width:3px
Streak Điểm Hàng Ngày Thưởng Mốc
Ngày 1-6 2 MP -
Ngày 7 3 MP 🎁 20 MP bonus
Ngày 8-13 3 MP -
Ngày 14 4 MP 🎁 35 MP bonus
Ngày 15-20 4 MP -
Ngày 21 5 MP 🎁 50 MP bonus
Ngày 22-29 5 MP -
Ngày 30 10 MP 👑 100 MP + Badge

API Endpoints

APIs Mission

Phương Thức Endpoint Mô Tả
GET /api/v1/missions Danh sách mission
GET /api/v1/missions/{id} Chi tiết mission
GET /api/v1/missions/featured Mission nổi bật

APIs Task

Phương Thức Endpoint Mô Tả
POST /api/v1/tasks/start Bắt đầu task
GET /api/v1/tasks/me Task đang làm
POST /api/v1/tasks/{id}/progress Cập nhật tiến độ
POST /api/v1/tasks/{id}/complete Hoàn thành task
POST /api/v1/tasks/{id}/claim Nhận thưởng
GET /api/v1/tasks/history Lịch sử task

APIs Điểm Danh

Phương Thức Endpoint Mô Tả
POST /api/v1/checkin Điểm danh
GET /api/v1/checkin/status Trạng thái điểm danh
GET /api/v1/checkin/calendar Lịch tháng

APIs Admin Backoffice

🔧 Quản Lý Cấu Hình

Phương Thức Endpoint Mô Tả
GET /api/v1/admin/config Lấy cấu hình hệ thống
PUT /api/v1/admin/config Cập nhật cấu hình
GET /api/v1/admin/config/missions Cấu hình mission types
PUT /api/v1/admin/config/missions Cập nhật cấu hình mission
GET /api/v1/admin/config/checkin Cấu hình check-in & streak
PUT /api/v1/admin/config/checkin Cập nhật thưởng streak
GET /api/v1/admin/config/rewards Cấu hình phần thưởng
PUT /api/v1/admin/config/rewards Cập nhật reward rates

📋 Quản Lý Mission

Phương Thức Endpoint Mô Tả
GET /api/v1/admin/missions Danh sách missions (phân trang)
POST /api/v1/admin/missions Tạo mission mới
GET /api/v1/admin/missions/{id} Chi tiết mission
PUT /api/v1/admin/missions/{id} Cập nhật mission
DELETE /api/v1/admin/missions/{id} Xóa mission
PUT /api/v1/admin/missions/{id}/activate Kích hoạt mission
PUT /api/v1/admin/missions/{id}/pause Tạm dừng mission
POST /api/v1/admin/missions/{id}/duplicate Nhân bản mission

👥 Quản Lý User & Task

Phương Thức Endpoint Mô Tả
GET /api/v1/admin/users Danh sách users (phân trang)
GET /api/v1/admin/users/{id} Chi tiết user
GET /api/v1/admin/users/{id}/tasks Tasks của user
GET /api/v1/admin/users/{id}/checkin Check-in history của user
PUT /api/v1/admin/users/{id}/reset-streak Reset streak user
PUT /api/v1/admin/users/{id}/adjust-points Điều chỉnh điểm user
GET /api/v1/admin/tasks Danh sách tasks (phân trang)
GET /api/v1/admin/tasks/{id} Chi tiết task
PUT /api/v1/admin/tasks/{id}/verify Xác thực task thủ công
PUT /api/v1/admin/tasks/{id}/reject Từ chối task
PUT /api/v1/admin/tasks/{id}/approve Duyệt task

📊 Phân Tích & Báo Cáo

Phương Thức Endpoint Mô Tả
GET /api/v1/admin/analytics/overview Tổng quan dashboard
GET /api/v1/admin/analytics/missions Thống kê mission
GET /api/v1/admin/analytics/checkin Thống kê check-in
GET /api/v1/admin/analytics/rewards Thống kê phần thưởng
GET /api/v1/admin/analytics/users Thống kê người dùng
GET /api/v1/admin/audit-logs Nhật ký thay đổi cấu hình

Điểm Tích Hợp

Phụ Thuộc Dịch Vụ

%%{init: {'theme':'dark'}}%%
flowchart LR
    subgraph Mission["📋 Mission Service"]
        M[Mission Service]
    end
    
    subgraph Auth["🔐 Xác Thực"]
        IAM[IAM Service]
    end
    
    subgraph Rewards["💰 Phần Thưởng"]
        Wallet[Wallet Service]
        Mining[Mining Service]
    end
    
    subgraph Social["👥 Mạng Xã Hội"]
        SocialSvc[Social Service]
        Storage[Storage Service]
    end
    
    IAM -->|JWT Auth| M
    M -->|Cấp Điểm| Wallet
    M <-->|Đồng Bộ Referral| Mining
    M <-->|Kiểm Tra Bạn Bè| SocialSvc
    M <-->|Media| Storage
    
    style Mission fill:#8E44AD,color:#ECF0F1,stroke:#7D3C98,stroke-width:3px
    style Auth fill:#C0392B,color:#ECF0F1,stroke:#A93226,stroke-width:2px
    style Rewards fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
    style Social fill:#3498DB,color:#ECF0F1,stroke:#2980B9,stroke-width:2px

Integration Events

Sự Kiện Nhà Xuất Bản Người Tiêu Thụ Mô Tả
MissionCompletedEvent Mission Wallet Hoàn thành mission
CheckInCompletedEvent Mission Wallet Điểm danh xong
UserRegisteredEvent IAM Mission Tạo hồ sơ user
ReferralActivatedEvent Mining Mission Đồng bộ mời bạn

Tech Stack

Thành Phần Công Nghệ Mục Đích
Framework .NET 10 Framework LTS mới nhất
API Layer Controllers + MediatR CQRS pattern
Database PostgreSQL + EF Core 10 Lưu trữ dữ liệu
Caching Redis + HybridCache L1+L2 caching
Message Queue RabbitMQ (MassTransit) Integration events
Scheduler Hangfire Background jobs
Validation FluentValidation Validation request
API Docs Swagger/OpenAPI Tài liệu API

Cấu Hình

Biến Môi Trường

Biến Mô Tả Bắt Buộc
DATABASE_URL Kết nối PostgreSQL
REDIS_URL Kết nối Redis
RABBITMQ_URL Kết nối RabbitMQ
JWT_AUTHORITY URL phát hành JWT
MAX_DAILY_TASKS Số task tối đa/ngày Không

Bảo Mật & Chống Gian Lận

Phòng Chống Gian Lận

%%{init: {'theme':'dark'}}%%
flowchart TD
    Request([🚀 Yêu Cầu]) --> Rate{⏱️ Rate Limit}
    Rate -->|Vượt Quá| Block[❌ Chặn]
    Rate -->|OK| Device{🔍 Kiểm Tra Thiết Bị}
    Device -->|Đáng Ngờ| Flag[⚠️ Đánh Dấu]
    Device -->|OK| Verify{✅ Xác Thực Bằng Chứng}
    Verify -->|Không Hợp Lệ| Reject[❌ Từ Chối]
    Verify -->|Hợp Lệ| Reward[🎁 Cấp Thưởng]
    
    style Block fill:#C0392B,color:#ECF0F1,stroke:#A93226,stroke-width:2px
    style Reject fill:#E74C3C,color:#ECF0F1,stroke:#C0392B,stroke-width:2px
    style Reward fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
Biện Pháp Mô Tả
Rate Limiting Số task tối đa mỗi ngày
Cooldown Thời gian chờ giữa các lần hoàn thành
Device Fingerprint Theo dõi đa tài khoản
Evidence Validation AI + Manual review cho UGC

Lộ Trình

Giai Đoạn 1: Core (Tuần 1-2)

  • Thiết lập project
  • Domain model
  • Database schema

Giai Đoạn 2: Điểm Danh (Tuần 3)

  • Check-in aggregate
  • Tính toán streak
  • Phần thưởng mốc

Giai Đoạn 3: Xem Video (Tuần 4-5)

  • Loại mission video
  • Theo dõi tiến độ
  • Xác thực thời lượng

Giai Đoạn 4: Tương Tác XH (Tuần 6-7)

  • Cấu hình nền tảng xã hội
  • Phương thức xác thực
  • Tích hợp OAuth

Giai Đoạn 5: Nâng Cao (Tuần 8+)

  • Pay per click/upload
  • Mời bạn bè
  • Admin analytics