Quests Documentation

Comprehensive guide to the Eska Platform Quest System - gamified challenges that reward users with points for completing various trading and platform activities.

The Quest System is a core gamification feature that encourages user engagement through structured challenges and rewards. Users can complete various quests to earn points, unlock achievements, and progress through the platform's reward tiers.

Key Features

  • Dynamic Quest Generation - Quests are generated from reward configurations
  • Progress Tracking - Real-time progress monitoring for all quest types
  • Category Organization - Quests organized by type and difficulty
  • Reward System - Points and achievement rewards for completion
  • Repeatable Quests - Some quests can be completed multiple times
  • Expiration System - Time-limited quests for urgency

Quest System Architecture

The quest system is built on a flexible architecture that allows for dynamic quest generation and management. Quests are primarily generated from the reward_configurations table, making them easily configurable without code changes.

System Components

Quest Generation

Quests are dynamically generated from public reward configurations. The system filters configurations marked as is_public: true and is_active: true to create available challenges.

Progress Tracking

User progress is tracked through the quest_completions table, which stores current progress, completion status, and claim status for each user-quest combination.

Reward Distribution

Upon quest completion and claiming, users receive points directly to their balance, and activities are logged for transparency and audit purposes.

Achievement Integration

Quest completions can trigger achievement unlocks, providing additional rewards and recognition for user accomplishments.

Quest Lifecycle

  1. Quest Generation - Quests are created from active reward configurations
  2. User Discovery - Users can browse and search available quests
  3. Progress Tracking - System tracks user progress toward quest completion
  4. Completion Detection - System automatically detects when quest requirements are met
  5. Claiming Process - Users manually claim completed quests to receive rewards
  6. Reward Distribution - Points are awarded and activities are logged
  7. Achievement Check - System checks for achievement unlocks

Quest Types

The quest system supports various types of challenges, each designed to encourage different aspects of platform engagement and trading activity.

Primary Quest Types

Quest Type Description Example Reward Range
Profit Milestones Achieve specific profit targets from trading Earn $100 profit in a single trade 100-1000 points
Volume Milestones Reach trading volume targets Trade 10 lots in a single day 50-500 points
Streak Challenges Maintain consecutive trading days Trade for 7 consecutive days 200-2000 points
Trading Quests Complete specific trading activities Execute 5 successful trades 100-800 points
General Challenges Miscellaneous platform activities Complete KYC verification 50-500 points

Quest Properties

  • Repeatable - Some quests can be completed multiple times
  • Time-Limited - Quests may have expiration dates for urgency
  • Progressive - Some quests have multiple tiers or levels
  • Conditional - Quests may have specific requirements or prerequisites

Quest Categories

Quests are organized into distinct categories with unique visual styling and reward structures. Each category targets specific user behaviors and platform engagement patterns.

Category System

📈 Profit Milestones

Focus: Trading profitability
Color: Emerald/Teal gradient
Rewards: High point values
Examples: Single trade profits, daily profit targets, monthly milestones

📊 Volume Milestones

Focus: Trading volume and activity
Color: Purple/Violet gradient
Rewards: Medium point values
Examples: Daily volume targets, lot size achievements, frequency goals

🔥 Streak Challenges

Focus: Consistency and engagement
Color: Red/Pink gradient
Rewards: Progressive bonuses
Examples: Daily login streaks, consecutive trading days

🎯 Trading Quests

Focus: Specific trading actions
Color: Cyan/Blue gradient
Rewards: Variable point values
Examples: Trade count targets, specific instrument trades

🏆 General Challenges

Focus: Platform engagement
Color: Yellow/Orange gradient
Rewards: Foundation rewards
Examples: Account setup, verification, referrals

Category Assignment Logic

Quests are automatically categorized based on their name and key using intelligent pattern matching:

JavaScript
const getChallengeCategory = (challenge) => {
  const name = challenge.name?.toLowerCase() || '';
  const key = challenge.key?.toLowerCase() || '';
  
  if (name.includes('profit') || key.includes('profit_milestone')) {
    return 'profit_milestones';
  }
  
  if (name.includes('volume') || key.includes('volume_milestone')) {
    return 'volume_milestones';
  }
  
  if (name.includes('streak') || key.includes('streak')) {
    return 'streak';
  }
  
  if (name.includes('trading') || key.includes('trading')) {
    return 'trading';
  }
  
  return 'general';
};

Quest Progress Tracking

The quest system provides comprehensive progress tracking for all user activities, allowing users to see their advancement toward quest completion in real-time.

Progress Components

  • Current Progress - Number of completed requirements
  • Required Progress - Total requirements needed for completion
  • Progress Percentage - Visual progress bar representation
  • Status Tracking - Active, completed, claimed states
  • Time Tracking - Quest duration and expiration monitoring

Progress States

State Description User Action System Response
Active Quest is available and in progress Continue working toward completion Track progress, update counters
Completed Quest requirements have been met Claim the quest reward Enable claim button, show completion status
Claimed Quest has been completed and claimed View in completed quests Award points, log activity, check achievements
Expired Quest has passed its expiration date No action available Remove from active quests, mark as expired

Progress Calculation

Quest progress is calculated based on the specific quest type and requirements:

PHP
// Example progress calculation for trading volume quest
$currentVolume = $user->getTradingVolume($startDate, $endDate);
$requiredVolume = $quest->required_count;
$progress = min(($currentVolume / $requiredVolume) * 100, 100);

// Update quest completion
$completion = QuestCompletion::updateOrCreate([
    'user_id' => $user->id,
    'quest_id' => $quest->id
], [
    'progress' => $currentVolume,
    'status' => $progress >= 100 ? 'completed' : 'active'
]);

Quest Rewards System

The quest reward system provides multiple types of rewards for quest completion, with points being the primary currency and achievements providing additional recognition.

Reward Types

Points Rewards

Primary Reward: Points added to user balance
Range: 50-5000 points per quest
Usage: Redeemable for rewards and bonuses
Tracking: Logged in activities and transactions

Achievement Unlocks

Secondary Reward: Achievement badges and recognition
Types: Quest completion milestones
Benefits: Additional points and status
Display: Profile achievements and leaderboards

Progress Bonuses

Bonus Rewards: Additional points for milestones
Examples: First quest completion, quest streaks
Multipliers: Streak bonuses and tier multipliers
Calculation: Based on user tier and streak status

Reward Calculation

Quest rewards are calculated based on several factors:

  • Base Points - Fixed reward amount for quest completion
  • Difficulty Multiplier - Higher rewards for more challenging quests
  • Streak Bonus - Additional points based on user's trading streak
  • Tier Bonus - Multipliers based on user's current tier level
  • First-Time Bonus - Extra rewards for first-time quest completions

Reward Distribution Process

PHP
// Quest claiming and reward distribution
public function claim(Request $request, Quest $quest)
{
    $user = auth()->user();
    
    // Find completed quest
    $completion = QuestCompletion::where('user_id', $user->id)
        ->where('quest_id', $quest->id)
        ->where('status', 'completed')
        ->where('claimed', false)
        ->first();
    
    if (!$completion) {
        return response()->json(['success' => false], 400);
    }
    
    DB::beginTransaction();
    
    try {
        // Mark as claimed
        $completion->update(['claimed' => true]);
        
        // Award points
        $user->increment('points_balance', $quest->reward_points);
        
        // Log activity
        $user->activities()->create([
            'activity_type' => 'quest_completed',
            'points_awarded' => $quest->reward_points,
            'description' => "Completed quest: {$quest->title}",
            'metadata' => json_encode([
                'quest_id' => $quest->id,
                'quest_title' => $quest->title,
            ]),
        ]);
        
        DB::commit();
        
        return response()->json([
            'success' => true,
            'points_awarded' => $quest->reward_points,
            'new_balance' => $user->points_balance,
        ]);
    } catch (\Exception $e) {
        DB::rollBack();
        return response()->json(['success' => false], 500);
    }
}

Quest Claiming Process

The quest claiming process ensures that users actively engage with completed quests and provides a clear mechanism for reward distribution.

Claiming Requirements

  • Quest Completion - All quest requirements must be met
  • Unclaimed Status - Quest must not have been previously claimed
  • Active Status - Quest must still be active and not expired
  • User Authentication - User must be logged in and authorized

Claiming Process Flow

  1. Quest Completion Detection - System automatically detects when quest requirements are met
  2. Status Update - Quest status changes from "active" to "completed"
  3. User Notification - User is notified of quest completion
  4. Claim Button Activation - Claim button becomes available in the UI
  5. User Action - User clicks claim button to receive rewards
  6. Reward Distribution - Points are awarded and activities are logged
  7. Achievement Check - System checks for achievement unlocks
  8. Status Finalization - Quest status changes to "claimed"

Claiming Interface

The quest claiming interface provides clear visual feedback and easy access to completed quests:

  • Progress Indicators - Visual progress bars showing completion status
  • Claim Buttons - Prominent buttons for claiming completed quests
  • Reward Preview - Clear display of points to be awarded
  • Status Badges - Color-coded badges showing quest status
  • Completion Timestamps - When quests were completed and claimed

Achievement System Integration

The quest system integrates with a comprehensive achievement system that provides additional recognition and rewards for user accomplishments.

Achievement Types

Achievement Category Icon Description Example
Verification 🆔 Account verification milestones KYC completion, document verification
Deposits 💰 Deposit-related achievements First deposit, deposit milestones
Streaks 🔥 Consistency and engagement Trading streaks, login streaks
Volume 📊 Trading volume achievements Volume milestones, lot achievements
Profit 📈 Profitability achievements Profit milestones, ROI achievements
Trading 📈 General trading activities Trade count, instrument diversity
Games 🎰 Gaming and entertainment Spin wheel wins, game completions

Achievement Unlock Process

PHP
// Achievement unlock checking
private function checkAchievementUnlocks($user)
{
    // Check for "Complete 5 Quests" achievement
    $completedQuests = QuestCompletion::where('user_id', $user->id)
        ->where('status', 'completed')
        ->count();
    
    $achievement = Achievement::where('unlock_criteria->type', 'quest_count')
        ->where('unlock_criteria->required_count', '<=', $completedQuests)
        ->whereDoesntHave('userAchievements', function ($query) use ($user) {
            $query->where('user_id', $user->id);
        })
        ->first();
    
    if ($achievement) {
        $user->achievements()->attach($achievement->id, [
            'unlocked_at' => now(),
        ]);
        
        // Award achievement points
        $user->increment('points_balance', $achievement->reward_points);
        
        return [
            'id' => $achievement->id,
            'name' => $achievement->name,
            'icon' => $achievement->icon,
            'reward_points' => $achievement->reward_points,
        ];
    }
    
    return null;
}

Achievement Display

Achievements are displayed with rich visual styling and categorization:

  • Color-Coded Categories - Each achievement type has distinct colors
  • Icon Representation - Visual icons for quick recognition
  • Progress Tracking - Progress toward achievement completion
  • Reward Information - Points and benefits for each achievement
  • Unlock Timestamps - When achievements were earned

Data Structure

The quest system utilizes several database tables to manage quests, progress tracking, and reward distribution.

Primary Tables

Table Purpose Key Fields
quests Quest definitions and metadata title, description, quest_type, reward_points, required_count
quest_completions User progress and completion tracking user_id, quest_id, progress, status, claimed
reward_configurations Dynamic quest generation source key, name, description, type, value, is_public
activities Quest completion activity logging user_id, type, description, points_earned, metadata
achievements Achievement definitions and criteria name, description, unlock_criteria, reward_points
user_achievements User achievement unlocks user_id, achievement_id, unlocked_at

Quest Model Structure

PHP
// Quest Model
class Quest extends Model
{
    protected $fillable = [
        'title',           // Quest name
        'description',     // Quest description
        'quest_type',      // Type of quest (trade, deposit, etc.)
        'reward_points',   // Points awarded for completion
        'required_count',  // Number of actions required
        'action_type',     // Type of action to track
        'is_repeatable',   // Can quest be completed multiple times
        'active',          // Is quest currently active
        'expires_at',      // Quest expiration date
    ];
    
    // Relationships
    public function completions(): HasMany
    {
        return $this->hasMany(QuestCompletion::class);
    }
}

Quest Completion Model Structure

PHP
// Quest Completion Model
class QuestCompletion extends Model
{
    protected $fillable = [
        'user_id',         // User who completed the quest
        'quest_id',        // Quest that was completed
        'progress',        // Current progress count
        'status',          // active, completed, claimed
        'claimed',         // Has the quest been claimed
        'completed_at',    // When quest was completed
    ];
    
    // Relationships
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
    
    public function quest(): BelongsTo
    {
        return $this->belongsTo(Quest::class);
    }
}

Data Relationships

  • User → Quest Completions - One-to-many relationship for user quest progress
  • Quest → Quest Completions - One-to-many relationship for quest progress tracking
  • Quest Completions → Activities - Quest completions generate activity logs
  • Quest Completions → Achievements - Quest completions can trigger achievement unlocks
  • Reward Configurations → Quests - Dynamic quest generation from configurations

API Endpoints

The quest system provides several API endpoints for quest management, progress tracking, and reward claiming.

Main Quest Endpoints

Endpoint Method Purpose Authentication
/quests GET List all available quests with user progress Required
/quests/{quest} GET Get specific quest details Required
/quests/{quest}/claim POST Claim a completed quest Required

Quest List Response

JSON
{
  "quests": [
    {
      "id": 1,
      "title": "Complete 5 Trades",
      "description": "Execute 5 successful trades to earn bonus points",
      "type": "trade",
      "reward_points": 500,
      "required_progress": 5,
      "current_progress": 2,
      "status": "active",
      "claimed": false,
      "is_repeatable": false,
      "expires_at": "2024-12-31T23:59:59Z",
      "created_at": "2024-12-01T00:00:00Z"
    }
  ],
  "publicRewards": [
    {
      "id": 1,
      "name": "First Trade Bonus",
      "description": "Complete your first trade",
      "value": 100,
      "type": "integer",
      "unit": "points"
    }
  ]
}

Quest Claiming Response

JSON
{
  "success": true,
  "message": "Quest claimed successfully",
  "points_awarded": 500,
  "new_balance": 12500
}

Error Responses

JSON
// Quest not completed
{
  "success": false,
  "message": "Quest not completed or already claimed"
}

// Quest already claimed
{
  "success": false,
  "message": "Quest has already been claimed"
}

// Server error
{
  "success": false,
  "message": "Failed to claim quest: [error details]"
}

Performance Considerations

  • Eager Loading - Quest completions are loaded with quests to prevent N+1 queries
  • Filtering - Only active and non-expired quests are returned
  • Caching - Public reward configurations can be cached for performance
  • Pagination - Large quest lists can be paginated if needed