123 lines
3.8 KiB
Markdown
123 lines
3.8 KiB
Markdown
# Base Infrastructure
|
|
|
|
This directory contains the core backend utilities for the task-based earning platform.
|
|
|
|
## Structure
|
|
|
|
```
|
|
app/lib/
|
|
├── types.ts # TypeScript type definitions
|
|
├── auth.ts # Authentication utilities
|
|
├── points.ts # Points management
|
|
├── badges.ts # Badge logic
|
|
└── db/
|
|
└── store.ts # In-memory data store
|
|
```
|
|
|
|
## Types (types.ts)
|
|
|
|
All TypeScript interfaces and enums:
|
|
- **User**: User account data
|
|
- **Transaction**: Points transactions (earned/spent)
|
|
- **Task**: Task definitions (checkin, ad, survey, quiz, etc.)
|
|
- **UserTask**: Completed tasks by users
|
|
- **Badge**: Achievement definitions
|
|
- **UserBadge**: Badges earned by users
|
|
- **Quiz**: Quiz questions and answers
|
|
- **Referral**: User referral tracking
|
|
- **API Response Types**: Structured responses for all endpoints
|
|
|
|
## Database Store (db/store.ts)
|
|
|
|
In-memory storage with CRUD operations:
|
|
- User management (create, find, update)
|
|
- Transaction tracking
|
|
- Task management
|
|
- Badge operations
|
|
- Quiz handling
|
|
- Referral tracking
|
|
|
|
### Seed Data
|
|
|
|
Pre-populated with:
|
|
- **6 Tasks**: Daily checkin, watch ad, survey, quiz, video, reading
|
|
- **6 Badges**: First steps, point collector, dedicated, week warrior, referral master, point millionaire
|
|
- **1 Quiz**: Sample quiz for quiz task
|
|
|
|
## Authentication (auth.ts)
|
|
|
|
User authentication and security:
|
|
- `hashPassword()`: Hash passwords (base64 for MVP)
|
|
- `verifyPassword()`: Verify password against hash
|
|
- `generateToken()`: Create JWT-like tokens
|
|
- `verifyToken()`: Validate and decode tokens
|
|
- `getCurrentUser()`: Extract user from request
|
|
- `requireAuth()`: Middleware for protected routes
|
|
- `isValidEmail()`: Email validation
|
|
- `isValidPassword()`: Password strength validation
|
|
- `sanitizeUser()`: Remove sensitive data from user object
|
|
|
|
## Points Management (points.ts)
|
|
|
|
Points and transactions:
|
|
- `addPoints()`: Award points to user
|
|
- `deductPoints()`: Spend points (with balance check)
|
|
- `getBalance()`: Get current balance
|
|
- `getTransactions()`: Get transaction history
|
|
- `getTransactionStats()`: Earnings/spending statistics
|
|
- `getPointsBreakdown()`: Points by source
|
|
- `awardTaskPoints()`: Task completion rewards
|
|
- `awardReferralBonus()`: Referral bonuses
|
|
- `awardStreakBonus()`: Daily streak bonuses
|
|
|
|
## Badge System (badges.ts)
|
|
|
|
Achievement tracking:
|
|
- `checkAndAwardBadges()`: Auto-award eligible badges
|
|
- `getUserBadgesWithDetails()`: Get earned badges
|
|
- `getAvailableBadges()`: Get unearned badges
|
|
- `getBadgeProgress()`: Progress towards specific badge
|
|
- `getAllBadgeProgress()`: Progress for all badges
|
|
- `getBadgeStats()`: Badge statistics
|
|
|
|
### Badge Requirements
|
|
|
|
- **POINTS_TOTAL**: Total points earned
|
|
- **TASKS_COMPLETED**: Number of tasks completed
|
|
- **STREAK_DAYS**: Consecutive daily activity
|
|
- **REFERRALS**: Number of successful referrals
|
|
|
|
## Usage Example
|
|
|
|
```typescript
|
|
import { createUser, findUserByEmail } from './db/store';
|
|
import { hashPassword, generateToken } from './auth';
|
|
import { addPoints, getBalance } from './points';
|
|
import { checkAndAwardBadges } from './badges';
|
|
|
|
// Register user
|
|
const passwordHash = await hashPassword('SecurePass123');
|
|
const user = createUser('user@example.com', passwordHash, 'John Doe');
|
|
|
|
// Generate auth token
|
|
const token = generateToken(user.id);
|
|
|
|
// Award points for task completion
|
|
addPoints(user.id, 10, 'task:daily_checkin');
|
|
|
|
// Check balance
|
|
const balance = getBalance(user.id);
|
|
|
|
// Check and award badges
|
|
const newBadges = checkAndAwardBadges(user.id);
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
This base infrastructure is ready for API endpoint integration:
|
|
1. Create `/api/auth/*` routes (register, login, logout)
|
|
2. Create `/api/tasks/*` routes (list, complete)
|
|
3. Create `/api/points/*` routes (balance, transactions)
|
|
4. Create `/api/badges/*` routes (earned, available, progress)
|
|
5. Create `/api/leaderboard` route
|