from typing import Any from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import AllowAny from rest_framework.request import Request from rest_framework.response import Response from accounts.serializers import LoginSerializer, RegisterSerializer, UserSerializer @api_view(["POST"]) @permission_classes([AllowAny]) def register_view(request: Request) -> Response: """Register a new user account.""" serializer = RegisterSerializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() return Response( UserSerializer(user).data, status=status.HTTP_201_CREATED, ) @api_view(["POST"]) @permission_classes([AllowAny]) def login_view(request: Request) -> Response: """Authenticate a user and return JWT tokens.""" serializer = LoginSerializer( data=request.data, context={"request": request}, ) serializer.is_valid(raise_exception=True) validated_data: dict[str, Any] = serializer.validated_data return Response( { "user": UserSerializer(validated_data["user"]).data, "access": validated_data["access"], "refresh": validated_data["refresh"], }, status=status.HTTP_200_OK, )