diff --git a/core/apps/accounts/serializers/user.py b/core/apps/accounts/serializers/user.py index c6ecf0f..cd74578 100644 --- a/core/apps/accounts/serializers/user.py +++ b/core/apps/accounts/serializers/user.py @@ -10,20 +10,19 @@ from core.apps.accounts.models import User from core.apps.shared.models import Region -class UserCreateSerializer(serializers.ModelSerializer): - class Meta: - model = User - fields = [ - 'first_name', 'last_name', 'telegram_id', 'region' - ] +class UserCreateSerializer(serializers.Serializer): + first_name = serializers.CharField() + last_name = serializers.CharField() + telegram_id = serializers.CharField() + region = serializers.IntegerField() def validate(self, data): if User.objects.filter(username=data['telegram_id']).exists(): raise serializers.ValidationError("User mavjud") region = Region.objects.filter(id=data['region']).first() if not region: - raise serializers.ValidationError("Region topilmadi") - data['region'] = region + raise serializers.ValidationError({"region": "Region topilmadi"}) + data['region_obj'] = region return data def create(self, validated_data): @@ -32,7 +31,7 @@ class UserCreateSerializer(serializers.ModelSerializer): first_name=validated_data.get('first_name'), last_name=validated_data.get('last_name'), telegram_id=validated_data.get('telegram_id'), - region=validated_data.get('region'), + region=validated_data.get('region_obj'), is_active=False, username=validated_data.get('telegram_id'), ) diff --git a/core/apps/accounts/views/user.py b/core/apps/accounts/views/user.py index de75a2b..bf05bab 100644 --- a/core/apps/accounts/views/user.py +++ b/core/apps/accounts/views/user.py @@ -29,7 +29,7 @@ class RegisterUserApiView(generics.GenericAPIView, ResponseMixin): def post(self, request): try: serializer = self.serializer_class(data=request.data) - if serializer.is_valid(raise_exception=True): + if serializer.is_valid(): serializer.save() return self.success_response(message='Foydalanuvchi qoshildi', status_code=201) return self.failure_response(data=serializer.errors, message='Foydalanuvchi qoshilmadi') diff --git a/core/apps/authentication/views/login.py b/core/apps/authentication/views/login.py index 260482f..1a5d308 100644 --- a/core/apps/authentication/views/login.py +++ b/core/apps/authentication/views/login.py @@ -1,9 +1,12 @@ # rest framework from rest_framework import generics + # rest framework simple jwt from rest_framework_simplejwt.tokens import RefreshToken + # drf yasg from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi # shared from core.apps.shared.utils.response_mixin import ResponseMixin @@ -19,13 +22,32 @@ class LoginApiView(generics.GenericAPIView, ResponseMixin): serializer_class = LoginSerializer queryset = User.objects.all() - @swagger_auto_schema( - responses={ - 200: SuccessResponseSerializer(data_serializer=response_serializers.LoginResponseSerializer()), - 400: BaseResponseSerializer(), - 500: BaseResponseSerializer(), - } - ) + # @swagger_auto_schema( + # operation_summary="Login", + # responses={ + # 200: openapi.Response( + # description="Success", + # schema=openapi.Schema( + # type=openapi.TYPE_OBJECT + # ), + # examples={ + # "application/json": { + # "status_code": 200, + # "status": "success", + # "message": "User topildi", + # "data": { + # "id": 1, + # "first_name": "Behruz", + # "last_name": "Xoliqberdiyev", + # "region": "nbve", + # "is_active": True, + # "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + # } + # } + # } + # ) + # } + # ) def post(self, request): try: serializer = self.serializer_class(data=request.data) @@ -33,12 +55,24 @@ class LoginApiView(generics.GenericAPIView, ResponseMixin): telegram_id = serializer.validated_data.get('telegram_id') user = User.objects.filter(telegram_id=telegram_id).first() if not user: - return self.failure_response(message="User topilmadi") + return self.failure_response(message="User topilmadi", status_code=404) + user_data = { + 'id': user.id, + 'first_name': user.first_name, + 'last_name': user.last_name, + 'region': user.region.name, + 'is_active': user.is_active, + 'token': None + } if not user.is_active: - return self.failure_response(message="User tasdiqlanmagan") + return self.success_response( + message="User tasdiqlanmagan", + data=user_data + ) token = RefreshToken.for_user(user) - return self.success_response(data={'token': str(token.access_token)}) + user_data['token'] = str(token) + return self.success_response(data=user_data, message='User topildi') return self.failure_response(data=serializer.errors, message='siz tarafdan xatolik') except Exception as e: