from rest_framework import status from rest_framework.views import APIView from rest_framework.generics import CreateAPIView, GenericAPIView from rest_framework.response import Response from rest_framework.permissions import AllowAny from django.utils import timezone from drf_spectacular.utils import extend_schema, OpenApiResponse, inline_serializer from rest_framework import serializers from apps.api.models import AppVersion, SupportMessage from apps.api.serializers import AppVersionSerializer, SupportMessageCreateSerializer class HealthCheckView(APIView): """ Health check endpoint returning system status and current timestamp """ permission_classes = [AllowAny] @extend_schema( summary="Check API server health status", description="Returns system status, current timestamp, and API version", responses={ 200: inline_serializer( name="HealthCheckResponse", fields={ "status": serializers.CharField(default="healthy"), "timestamp": serializers.DateTimeField(), "version": serializers.CharField(default="1.0.0"), } ) } ) def get(self, request): return Response({ "status": "healthy", "timestamp": timezone.now().isoformat(), "version": "1.0.0", }, status=status.HTTP_200_OK) class AppVersionView(APIView): """ Returns latest active application version """ permission_classes = [AllowAny] @extend_schema( summary="Get active application version", description="Returns latest active mobile/web application version details", responses={ 200: AppVersionSerializer, 404: OpenApiResponse(description="No active version found") } ) def get(self, request): version = AppVersion.get_latest_active() if not version: return Response({"detail": "No active version found."}, status=status.HTTP_404_NOT_FOUND) serializer = AppVersionSerializer(version, context={'request': request}) return Response(serializer.data) class SupportMessageCreateView(CreateAPIView): """ Submit a user contact or support inquiry """ permission_classes = [AllowAny] serializer_class = SupportMessageCreateSerializer queryset = SupportMessage.objects.all() # HomeView alias for backward compatibility HomeView = HealthCheckView