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 | Có |
REDIS_URL |
Kết nối Redis | Có |
RABBITMQ_URL |
Kết nối RabbitMQ | Có |
JWT_AUTHORITY |
URL phát hành JWT | Có |
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