113 lines
3.2 KiB
Python
113 lines
3.2 KiB
Python
"""
|
|
Core views for the Dubai Analytics Platform.
|
|
"""
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.permissions import AllowAny
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from django.http import JsonResponse
|
|
from django.views.decorators.cache import cache_page
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.vary import vary_on_headers
|
|
from django.core.cache import cache
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@api_view(['GET'])
|
|
@permission_classes([AllowAny])
|
|
def health_check(request):
|
|
"""
|
|
Health check endpoint for monitoring.
|
|
"""
|
|
return Response({
|
|
'status': 'healthy',
|
|
'service': 'Dubai Analytics API',
|
|
'version': '1.0.0',
|
|
'timestamp': cache.get('health_check_timestamp', 'unknown')
|
|
})
|
|
|
|
|
|
@api_view(['GET'])
|
|
@permission_classes([AllowAny])
|
|
def api_info(request):
|
|
"""
|
|
API information endpoint.
|
|
"""
|
|
return Response({
|
|
'name': 'Dubai Analytics API',
|
|
'version': '1.0.0',
|
|
'description': 'Multi-tenant SaaS platform for Dubai Land Department data analytics',
|
|
'documentation': '/api/docs/',
|
|
'endpoints': {
|
|
'auth': '/api/v1/auth/',
|
|
'analytics': '/api/v1/analytics/',
|
|
'reports': '/api/v1/reports/',
|
|
'integrations': '/api/v1/integrations/',
|
|
'billing': '/api/v1/billing/',
|
|
'monitoring': '/api/v1/monitoring/',
|
|
}
|
|
})
|
|
|
|
|
|
@api_view(['GET'])
|
|
def user_info(request):
|
|
"""
|
|
Get current user information.
|
|
"""
|
|
user = request.user
|
|
return Response({
|
|
'id': str(user.id),
|
|
'email': user.email,
|
|
'username': user.username,
|
|
'subscription_type': user.subscription_type,
|
|
'is_api_enabled': user.is_api_enabled,
|
|
'company_name': user.company_name,
|
|
'is_verified': user.is_verified,
|
|
'date_joined': user.date_joined,
|
|
'last_login': user.last_login,
|
|
})
|
|
|
|
|
|
@api_view(['GET'])
|
|
def usage_stats(request):
|
|
"""
|
|
Get user's API usage statistics.
|
|
"""
|
|
user = request.user
|
|
|
|
# Get usage limits
|
|
limits = user.get_usage_limits()
|
|
|
|
# Get current usage (this would need to be implemented with actual usage tracking)
|
|
# For now, return placeholder data
|
|
current_usage = {
|
|
'api_calls_this_month': 0,
|
|
'reports_this_month': 0,
|
|
'forecast_requests_this_month': 0,
|
|
}
|
|
|
|
return Response({
|
|
'subscription_type': user.subscription_type,
|
|
'limits': limits,
|
|
'current_usage': current_usage,
|
|
'remaining': {
|
|
'api_calls': limits.get('api_calls_per_month', 0) - current_usage['api_calls_this_month'],
|
|
'reports': limits.get('reports_per_month', 0) - current_usage['reports_this_month'],
|
|
'forecast_requests': limits.get('forecast_requests_per_month', 0) - current_usage['forecast_requests_this_month'],
|
|
}
|
|
})
|
|
|
|
|
|
def ratelimited_view(request):
|
|
"""
|
|
View for rate limited requests.
|
|
"""
|
|
return JsonResponse({
|
|
'error': 'Rate limit exceeded',
|
|
'message': 'Too many requests. Please try again later.',
|
|
'retry_after': 60
|
|
}, status=429)
|
|
|