Base code
This commit is contained in:
185
backend/services/subscription/README.md
Normal file
185
backend/services/subscription/README.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# Subscription Services Package
|
||||
|
||||
## Overview
|
||||
|
||||
This package consolidates all subscription, billing, and usage tracking related services and middleware into a single, well-organized module. This follows the same architectural pattern as the onboarding package for consistency and maintainability.
|
||||
|
||||
## Package Structure
|
||||
|
||||
```
|
||||
backend/services/subscription/
|
||||
├── __init__.py # Package exports
|
||||
├── pricing_service.py # API pricing and cost calculations
|
||||
├── usage_tracking_service.py # Usage tracking and limits
|
||||
├── exception_handler.py # Exception handling
|
||||
├── monitoring_middleware.py # API monitoring with usage tracking
|
||||
└── README.md # This documentation
|
||||
```
|
||||
|
||||
## Services
|
||||
|
||||
### PricingService
|
||||
- **File**: `pricing_service.py`
|
||||
- **Purpose**: Manages API pricing, cost calculation, and subscription limits
|
||||
- **Key Features**:
|
||||
- Dynamic pricing based on API provider and model
|
||||
- Cost calculation for input/output tokens
|
||||
- Subscription limit enforcement
|
||||
- Billing period management
|
||||
|
||||
### UsageTrackingService
|
||||
- **File**: `usage_tracking_service.py`
|
||||
- **Purpose**: Comprehensive tracking of API usage, costs, and subscription limits
|
||||
- **Key Features**:
|
||||
- Real-time usage tracking
|
||||
- Cost calculation and billing
|
||||
- Usage limit enforcement with TTL caching
|
||||
- Usage alerts and notifications
|
||||
|
||||
### SubscriptionExceptionHandler
|
||||
- **File**: `exception_handler.py`
|
||||
- **Purpose**: Centralized exception handling for subscription-related errors
|
||||
- **Key Features**:
|
||||
- Custom exception types
|
||||
- Error handling decorators
|
||||
- Consistent error responses
|
||||
|
||||
### Monitoring Middleware
|
||||
- **File**: `monitoring_middleware.py`
|
||||
- **Purpose**: FastAPI middleware for API monitoring and usage tracking
|
||||
- **Key Features**:
|
||||
- Request/response monitoring
|
||||
- Usage tracking integration
|
||||
- Performance metrics
|
||||
- Database API monitoring
|
||||
|
||||
## Usage
|
||||
|
||||
### Import Pattern
|
||||
|
||||
Always use the consolidated package for subscription-related imports:
|
||||
|
||||
```python
|
||||
# ✅ Correct - Use consolidated package
|
||||
from services.subscription import PricingService, UsageTrackingService
|
||||
from services.subscription import SubscriptionExceptionHandler
|
||||
from services.subscription import check_usage_limits_middleware
|
||||
|
||||
# ❌ Incorrect - Old scattered imports
|
||||
from services.pricing_service import PricingService
|
||||
from services.usage_tracking_service import UsageTrackingService
|
||||
from middleware.monitoring_middleware import check_usage_limits_middleware
|
||||
```
|
||||
|
||||
### Service Initialization
|
||||
|
||||
```python
|
||||
from services.subscription import PricingService, UsageTrackingService
|
||||
from services.database import get_db
|
||||
|
||||
# Get database session
|
||||
db = next(get_db())
|
||||
|
||||
# Initialize services
|
||||
pricing_service = PricingService(db)
|
||||
usage_service = UsageTrackingService(db)
|
||||
```
|
||||
|
||||
### Middleware Registration
|
||||
|
||||
```python
|
||||
from services.subscription import monitoring_middleware
|
||||
|
||||
# Register middleware in FastAPI app
|
||||
app.middleware("http")(monitoring_middleware)
|
||||
```
|
||||
|
||||
## Database Models
|
||||
|
||||
The subscription services use the following database models (defined in `backend/models/subscription_models.py`):
|
||||
|
||||
- `APIProvider` - API provider enumeration
|
||||
- `SubscriptionPlan` - Subscription plan definitions
|
||||
- `UserSubscription` - User subscription records
|
||||
- `UsageSummary` - Usage summary by billing period
|
||||
- `APIUsageLog` - Individual API usage logs
|
||||
- `APIProviderPricing` - Pricing configuration
|
||||
- `UsageAlert` - Usage limit alerts
|
||||
- `SubscriptionTier` - Subscription tier definitions
|
||||
- `BillingCycle` - Billing cycle enumeration
|
||||
- `UsageStatus` - Usage status enumeration
|
||||
|
||||
## Key Features
|
||||
|
||||
### 1. Database-Only Persistence
|
||||
- All data stored in database tables
|
||||
- No file-based storage
|
||||
- User-isolated data access
|
||||
|
||||
### 2. TTL Caching
|
||||
- In-memory caching for performance
|
||||
- 30-second TTL for usage limit checks
|
||||
- 10-minute TTL for dashboard data
|
||||
|
||||
### 3. Real-time Monitoring
|
||||
- Live API usage tracking
|
||||
- Performance metrics collection
|
||||
- Error rate monitoring
|
||||
|
||||
### 4. Flexible Pricing
|
||||
- Per-provider pricing configuration
|
||||
- Model-specific pricing
|
||||
- Dynamic cost calculation
|
||||
|
||||
## Error Handling
|
||||
|
||||
The package provides comprehensive error handling:
|
||||
|
||||
```python
|
||||
from services.subscription import (
|
||||
SubscriptionException,
|
||||
UsageLimitExceededException,
|
||||
PricingException,
|
||||
TrackingException
|
||||
)
|
||||
|
||||
try:
|
||||
# Subscription operation
|
||||
pass
|
||||
except UsageLimitExceededException as e:
|
||||
# Handle usage limit exceeded
|
||||
pass
|
||||
except PricingException as e:
|
||||
# Handle pricing error
|
||||
pass
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The services use environment variables for configuration:
|
||||
|
||||
- `SUBSCRIPTION_DASHBOARD_NOCACHE` - Bypass dashboard cache
|
||||
- `ENABLE_ALPHA` - Enable alpha features (default: false)
|
||||
|
||||
## Migration from Old Structure
|
||||
|
||||
This package consolidates the following previously scattered files:
|
||||
|
||||
- `backend/services/pricing_service.py` → `subscription/pricing_service.py`
|
||||
- `backend/services/usage_tracking_service.py` → `subscription/usage_tracking_service.py`
|
||||
- `backend/services/subscription_exception_handler.py` → `subscription/exception_handler.py`
|
||||
- `backend/middleware/monitoring_middleware.py` → `subscription/monitoring_middleware.py`
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Single Package**: All subscription logic in one location
|
||||
2. **Clear Ownership**: Easy to find subscription-related code
|
||||
3. **Better Organization**: Follows same pattern as onboarding
|
||||
4. **Easier Maintenance**: Single source of truth for billing logic
|
||||
5. **Consistent Architecture**: Matches onboarding consolidation
|
||||
|
||||
## Related Packages
|
||||
|
||||
- `services.onboarding` - Onboarding and user setup
|
||||
- `models.subscription_models` - Database models
|
||||
- `api.subscription_api` - API endpoints
|
||||
Reference in New Issue
Block a user