Files
TurboTrades/PRICING_SETUP_COMPLETE.md
2026-01-10 04:57:43 +00:00

8.6 KiB

Pricing System & Phase Detection - COMPLETE

🎉 What's Been Implemented

1. Phase Detection

  • Automatically detects Doppler phases from item names/descriptions
  • Supported phases: Ruby, Sapphire, Black Pearl, Emerald, Phase 1-4
  • Phase multipliers applied to prices (Ruby 3.5x, Sapphire 3.8x, etc.)
  • Integrated into inventory loading

2. Real Market Prices Only

  • Removed all hardcoded prices
  • Only uses real prices from SteamAPIs.com
  • Items without market data show as "no price available"
  • No fake/estimated prices anymore

3. Database Storage

  • Added marketPrice field to Item model
  • Added priceUpdatedAt timestamp
  • Added phase field for Doppler items
  • Proper indexes for performance

4. Automatic Updates

  • Scheduled hourly price updates (configurable)
  • Fetches from SteamAPIs.com /market/items/{AppID}
  • Updates CS2 and Rust items automatically
  • Logs update results

5. Admin Panel

  • Complete admin interface at /admin
  • Price update controls
  • System statistics
  • Items without prices list
  • Real-time status monitoring

🚀 Quick Start

Step 1: Make Yourself Admin

Run this script to grant admin access:

node make-admin.js

This will:

  • Find your user (Steam ID: 76561198027608071)
  • Set staffLevel to 3 (admin)
  • Grant access to admin routes

Step 2: Restart Backend

# Stop current server (Ctrl+C)
npm run dev

The server will:

  • Load pricing service
  • Start automatic hourly updates (if enabled)
  • Register admin routes

Step 3: Initial Price Update

Option A: Via Admin Panel (Recommended)

  1. Go to http://localhost:5173/admin
  2. Select "All Games"
  3. Click "Update Prices Now"
  4. Wait for completion (~30 seconds)

Option B: Via API

curl -X POST http://localhost:3000/api/admin/prices/update \
  -H "Content-Type: application/json" \
  -H "Cookie: accessToken=YOUR_TOKEN" \
  -d '{"game": "all"}'

Step 4: Test Sell Page

  1. Go to http://localhost:5173/sell
  2. Load your Steam inventory
  3. Items now show real market prices
  4. Items without prices won't appear (no fake prices!)

📊 Admin Panel Features

Price Management

  • Update Prices - Manually trigger price updates
  • Price Status - View last update time and coverage
  • Missing Prices - See items without market data
  • System Stats - Total value, items, users

Statistics Dashboard

  • CS2 item count and price coverage
  • Rust item count and price coverage
  • Last update timestamp
  • Total marketplace value
  • Average prices

🔧 Configuration

Environment Variables

# Steam API Key (REQUIRED)
STEAM_APIS_KEY=your_steamapis_key_here

# Admin Access (Your Steam ID already added to script)
# Or add to .env for multiple admins:
ADMIN_STEAM_IDS=76561198027608071,76561198000000000

# Enable automatic price updates in development (OPTIONAL)
ENABLE_PRICE_UPDATES=true

Automatic Updates

Default: Runs every 1 hour in production

Disable in Development:

# Don't set ENABLE_PRICE_UPDATES or set to false

Change Interval:

// In index.js
pricingService.scheduleUpdates(120 * 60 * 1000); // 2 hours

📡 API Endpoints

All admin endpoints require:

  • Authentication (logged in via Steam)
  • Admin access (staffLevel >= 3)

Update Prices

POST /api/admin/prices/update
Body: { "game": "cs2" | "rust" | "all" }

Get Price Status

GET /api/admin/prices/status

Get Items Without Prices

GET /api/admin/prices/missing?game=cs2&limit=50

Estimate Price for Item

POST /api/admin/prices/estimate
Body: { "itemId": "item_id_here" }

Get System Stats

GET /api/admin/stats

Schedule Updates

POST /api/admin/prices/schedule
Body: { "intervalMinutes": 60 }

🎯 How It Works

Phase Detection Flow

  1. Inventory Load → User goes to Sell page
  2. Fetch Steam Data → Get item descriptions
  3. Parse Phase → Scan name + description for keywords
  4. Apply Multipliers → Adjust price based on phase

Example:

Item: "★ Karambit | Doppler (Factory New) - Ruby"
Phase Detected: "Ruby"
Base Price: $400
With Ruby Multiplier (3.5x): $1,400

Price Update Flow

  1. Trigger → Scheduled (hourly) or manual (admin panel)
  2. Fetch API → GET SteamAPIs.com/market/items/730
  3. Parse Response → Extract item names and 30-day avg prices
  4. Query DB → Get all active items for game
  5. Match & Update → Compare by name, update marketPrice
  6. Log Results → Report updated/not found/errors

Example Log:

📊 Fetching CS2 market prices...
✅ Fetched 5000 prices for CS2
🔄 Updating database prices for CS2...
✅ Price update complete for CS2:
   - Total items: 150
   - Updated: 142
   - Not found: 8
   - Errors: 0

Price Calculation (Sell Page)

1. Fetch market price from database
   
2. If no price  Item not shown (no fake prices!)
   
3. Apply wear multiplier (FN=1.0, MW=0.85, etc.)
   
4. Apply phase multiplier (Ruby=3.5x, etc.)
   
5. Apply StatTrak multiplier (1.5x)
   
6. Apply Souvenir multiplier (1.3x)
   
7. Show final price to user

🔍 Testing

Test Phase Detection

// In browser console on Sell page
// Select a Doppler knife and check:
console.log(item.phase); // "Ruby", "Phase 2", etc.

Test Price Updates

# Manually trigger update
POST /api/admin/prices/update

# Check logs for:
# ✅ Fetched X prices for CS2
# ✅ Updated X/Y items

Verify Database

// MongoDB shell
db.items.find({ marketPrice: { $exists: true } }).count()
db.items.find({ phase: { $ne: null } })

📈 What Changed

Files Created

  • services/pricing.js - Pricing service
  • routes/admin.js - Admin API endpoints
  • frontend/src/views/AdminPage.vue - Admin panel UI
  • make-admin.js - Script to grant admin access
  • PRICING_SYSTEM.md - Complete documentation

Files Modified

  • models/Item.js - Added marketPrice, phase, priceUpdatedAt
  • models/User.js - Added isAdmin virtual property
  • routes/inventory.js - Added phase detection, removed hardcoded prices
  • services/pricing.js - Removed all hardcoded price logic
  • index.js - Added pricing service initialization

Frontend Already Has

  • Admin route in router
  • isAdmin computed property in auth store
  • Admin panel component ready

⚠️ Important Notes

No More Hardcoded Prices

  • Items without market data will not show prices
  • This is intentional - only real prices now
  • Run price update to populate prices

First-Time Setup

  1. Run node make-admin.js to become admin
  2. Restart backend server
  3. Go to admin panel
  4. Click "Update Prices Now"
  5. Wait for completion
  6. Prices now populated!

Rate Limits

  • Free tier: 100,000 requests/month
  • Each update uses 1 request per game
  • Default: 2 requests/hour (CS2 + Rust)
  • Monthly: ~1,500 requests (well within limit)

🎓 Next Steps

Immediate (Do Now)

  1. Run node make-admin.js
  2. Restart backend
  3. Go to http://localhost:5173/admin
  4. Click "Update Prices Now"
  5. Test Sell page with real prices

Short Term

  • Monitor price coverage (% of items with prices)
  • Check items without prices regularly
  • Adjust update frequency if needed
  • Add caching for frequently accessed prices

Long Term

  • Implement Redis caching
  • Add price history tracking
  • Create price charts/trends
  • Add email alerts for failed updates

🐛 Troubleshooting

"Admin access required"

# Run this command:
node make-admin.js

# Then restart backend

"No prices available"

# Trigger price update via admin panel
# Or via API:
POST /api/admin/prices/update

Items not showing prices

  • This is normal if market data doesn't exist
  • Not all items are on Steam market
  • Check "Items Without Prices" in admin panel

Update failing

  • Check STEAM_APIS_KEY is set
  • Verify API key is valid at steamapis.com
  • Check rate limits not exceeded
  • Review backend logs for errors

📚 Documentation

  • Complete Guide: PRICING_SYSTEM.md
  • API Reference: See "API Endpoints" section above
  • Phase Detection: See "How It Works" section above

Summary

Status: COMPLETE
Admin Access: Run make-admin.js (one-time)
Price Source: SteamAPIs.com only (no hardcoded)
Update Frequency: Every 1 hour (automatic)
Admin Panel: http://localhost:5173/admin

Your Steam ID: 76561198027608071
Next Action: Run node make-admin.js and test!


Last Updated: 2024
Version: 1.0
Ready to Use: YES