Mission Service .NET
Mission & Task gamification service for GoodGo Platform.
📖 See also: Detailed Architecture Documentation
Overview
The Mission Service manages gamification missions and tasks, enabling users to earn rewards through various activities on the GoodGo platform.
Key Features
| Feature | Description |
|---|---|
| 🎬 Watch Video | Earn rewards by watching videos - Pay per view |
| 💰 Pay Per Click | Earn points by clicking ads/links |
| 📤 Pay Per Upload | Get rewarded for uploading UGC content |
| 👥 Invite Friends | Earn bonus when friends complete missions |
| 📅 Daily Check-in | Daily check-in with streak bonuses |
| ❤️ Social Actions | Like, Share, Subscribe to social channels |
Architecture Design
System Architecture
%%{init: {'theme':'dark'}}%%
graph TD
subgraph Gateway["🌐 API Gateway"]
Traefik[Traefik]
end
subgraph Mission["📋 Mission Service"]
API[API Layer]
Domain[Domain Layer]
Infra[Infrastructure]
end
subgraph External["🔗 External Services"]
IAM[IAM Service]
Wallet[Wallet Service]
Mining[Mining Service]
Social[Social Service]
Storage[Storage Service]
end
subgraph Data["💾 Data Layer"]
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
Clean Architecture Structure
mission-service-net/
├── src/
│ ├── MissionService.API/ # API Layer
│ │ ├── Controllers/
│ │ │ ├── MissionsController.cs # Mission management
│ │ │ ├── TasksController.cs # Task execution
│ │ │ ├── CheckInController.cs # Daily check-in
│ │ │ └── RewardsController.cs # Reward claims
│ │ └── Application/
│ │ ├── Commands/ # Write operations
│ │ ├── Queries/ # Read operations
│ │ └── IntegrationEvents/ # External events
│ │
│ ├── MissionService.Domain/ # Domain Layer
│ │ ├── AggregatesModel/
│ │ │ ├── MissionAggregate/ # Mission definitions
│ │ │ ├── TaskAggregate/ # Task executions
│ │ │ ├── CheckInAggregate/ # Daily check-in
│ │ │ └── RewardAggregate/ # Reward tracking
│ │ ├── Events/ # Domain events
│ │ └── Services/ # Domain services
│ │
│ └── MissionService.Infrastructure/ # Infrastructure
│ ├── EntityConfigurations/ # EF Core mappings
│ ├── Repositories/ # Data access
│ └── ExternalServices/ # API clients
│
├── tests/
├── docs/
└── Dockerfile
Domain Model
Core Aggregates
%%{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 : generates
UserTask --> UserCheckIn : may trigger
Mission Types
%%{init: {'theme':'dark'}}%%
flowchart LR
subgraph Types["📋 Mission Types"]
Video["🎬 Watch Video"]
Click["💰 Pay Per Click"]
Upload["📤 Pay Per Upload"]
Invite["👥 Invite Friends"]
CheckIn["📅 Daily Check-in"]
Social["❤️ Social Actions"]
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
Daily Check-in System
🔥 Streak Bonus
%%{init: {'theme':'dark'}}%%
flowchart LR
subgraph Streak["📅 Streak Tiers"]
D1["Day 1-6<br/>2 MP"] --> D7["Day 7<br/>🎁 +20 MP"]
D7 --> D14["Day 14<br/>🎁 +35 MP"]
D14 --> D21["Day 21<br/>🎁 +50 MP"]
D21 --> D30["Day 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 | Daily Points | Milestone Bonus |
|---|---|---|
| Day 1-6 | 2 MP | - |
| Day 7 | 3 MP | 🎁 20 MP bonus |
| Day 8-13 | 3 MP | - |
| Day 14 | 4 MP | 🎁 35 MP bonus |
| Day 15-20 | 4 MP | - |
| Day 21 | 5 MP | 🎁 50 MP bonus |
| Day 22-29 | 5 MP | - |
| Day 30 | 10 MP | 👑 100 MP + Badge |
API Endpoints
Mission APIs
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/missions |
List available missions |
GET |
/api/v1/missions/{id} |
Get mission details |
GET |
/api/v1/missions/category/{category} |
Get missions by category |
POST |
/api/v1/missions/{id}/start |
Start a mission task |
PUT |
/api/v1/missions/tasks/{taskId}/progress |
Update task progress |
POST |
/api/v1/missions/tasks/{taskId}/claim |
Claim task reward |
Check-in APIs
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/checkins |
Daily check-in |
GET |
/api/v1/checkins/status |
Check-in status |
GET |
/api/v1/checkins/history |
Check-in history (monthly) |
GET |
/api/v1/checkins/leaderboard |
Streak leaderboard |
GET |
/api/v1/checkins/config |
Streak bonus configuration |
Admin Backoffice APIs
📋 Mission Management
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/admin/missions |
List all missions |
POST |
/api/v1/admin/missions |
Create new mission |
GET |
/api/v1/admin/missions/{id} |
Get mission details |
POST |
/api/v1/admin/missions/{id}/activate |
Activate mission |
POST |
/api/v1/admin/missions/{id}/pause |
Pause mission |
POST |
/api/v1/admin/missions/{id}/archive |
Archive mission |
👥 Check-in Management
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/admin/checkins/users/{userId} |
Get user check-in details |
POST |
/api/v1/admin/checkins/users/{userId}/reset-streak |
Reset user streak |
GET |
/api/v1/admin/checkins/top-streaks |
Get top streak leaderboard |
✅ Task Management
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/admin/tasks/pending-verification |
Get pending verification tasks |
GET |
/api/v1/admin/tasks/users/{userId} |
Get user's tasks |
POST |
/api/v1/admin/tasks/{taskId}/approve |
Approve task |
POST |
/api/v1/admin/tasks/{taskId}/reject |
Reject task |
Integration Points
Service Dependencies
%%{init: {'theme':'dark'}}%%
flowchart LR
subgraph Mission["📋 Mission Service"]
M[Mission Service]
end
subgraph Auth["🔐 Auth"]
IAM[IAM Service]
end
subgraph Rewards["💰 Rewards"]
Wallet[Wallet Service]
Mining[Mining Service]
end
subgraph Social["👥 Social"]
SocialSvc[Social Service]
Storage[Storage Service]
end
IAM -->|JWT Auth| M
M -->|Grant Points| Wallet
M <-->|Referral Sync| Mining
M <-->|Friend Check| 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
| Event | Publisher | Consumer | Description |
|---|---|---|---|
MissionCompletedEvent |
Mission | Wallet | User completed mission |
CheckInCompletedEvent |
Mission | Wallet | Daily check-in done |
UserRegisteredEvent |
IAM | Mission | Create user profile |
ReferralActivatedEvent |
Mining | Mission | Sync invite status |
Tech Stack
| Component | Technology | Purpose |
|---|---|---|
| Framework | .NET 10 | Latest LTS framework |
| API Layer | Controllers + MediatR | CQRS pattern |
| Database | PostgreSQL + EF Core 10 | Persistent storage |
| Caching | Redis + HybridCache | L1+L2 caching |
| Message Queue | RabbitMQ (MassTransit) | Integration events |
| Scheduler | Hangfire | Background jobs |
| Validation | FluentValidation | Request validation |
| API Docs | Swagger/OpenAPI | Documentation |
Configuration
Environment Variables
| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
PostgreSQL connection | Yes |
REDIS_URL |
Redis connection | Yes |
RABBITMQ_URL |
RabbitMQ connection | Yes |
JWT_AUTHORITY |
JWT issuer URL | Yes |
MAX_DAILY_TASKS |
Max tasks per day | No |
Security & Anti-Fraud
Fraud Prevention
%%{init: {'theme':'dark'}}%%
flowchart TD
Request([🚀 Request]) --> Rate{⏱️ Rate Limit}
Rate -->|Exceeded| Block[❌ Block]
Rate -->|OK| Device{🔍 Device Check}
Device -->|Suspicious| Flag[⚠️ Flag]
Device -->|OK| Verify{✅ Verify Evidence}
Verify -->|Invalid| Reject[❌ Reject]
Verify -->|Valid| Reward[🎁 Grant Reward]
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
| Measure | Description |
|---|---|
| Rate Limiting | Max tasks per user per day |
| Cooldown | Min time between completions |
| Device Fingerprint | Track multi-account |
| Evidence Validation | AI + Manual review for UGC |
Roadmap
Phase 1: Core (Week 1-2)
- Project setup
- Domain model
- Database schema
Phase 2: Daily Check-in (Week 3)
- Check-in aggregate
- Streak calculation
- Milestone rewards
Phase 3: Watch Video (Week 4-5)
- Video mission type
- Progress tracking
- Duration verification
Phase 4: Social Actions (Week 6-7)
- Social platform configs
- Verification methods
- OAuth integration
Phase 5: Advanced (Week 8+)
- Pay per click/upload
- Invite friends
- Admin analytics