From d9bdf91352b0021074d3596a7d1818269d909a32 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 26 Nov 2025 15:26:04 +0500 Subject: [PATCH] admin uchun login api qoshildi --- core/apps/authentication/serializers/login.py | 9 +- core/apps/authentication/urls.py | 1 + core/apps/authentication/views/login.py | 88 ++++++++++++++++++- 3 files changed, 93 insertions(+), 5 deletions(-) diff --git a/core/apps/authentication/serializers/login.py b/core/apps/authentication/serializers/login.py index e9820bf..061cdcd 100644 --- a/core/apps/authentication/serializers/login.py +++ b/core/apps/authentication/serializers/login.py @@ -2,4 +2,11 @@ from rest_framework import serializers class LoginSerializer(serializers.Serializer): - telegram_id = serializers.CharField() \ No newline at end of file + telegram_id = serializers.CharField() + + +class AdminLoginSerializer(serializers.Serializer): + username = serializers.CharField() + password = serializers.CharField() + + \ No newline at end of file diff --git a/core/apps/authentication/urls.py b/core/apps/authentication/urls.py index 90ff1c2..de7d776 100644 --- a/core/apps/authentication/urls.py +++ b/core/apps/authentication/urls.py @@ -5,4 +5,5 @@ from core.apps.authentication.views import login urlpatterns = [ path('login/', login.LoginApiView.as_view(), name='login-api'), + path('admin_login/', login.AdminLoginApiView.as_view(), name='admin-login-admin'), ] \ No newline at end of file diff --git a/core/apps/authentication/views/login.py b/core/apps/authentication/views/login.py index 0db3a31..1c41109 100644 --- a/core/apps/authentication/views/login.py +++ b/core/apps/authentication/views/login.py @@ -10,12 +10,10 @@ from drf_yasg import openapi # shared from core.apps.shared.utils.response_mixin import ResponseMixin -from core.apps.shared.serializers.base import BaseResponseSerializer, SuccessResponseSerializer # accounts from core.apps.accounts.models import User # authentication -from core.apps.authentication.serializers.login import LoginSerializer -from core.apps.authentication.serializers import response as response_serializers +from core.apps.authentication.serializers.login import LoginSerializer, AdminLoginSerializer class LoginApiView(generics.GenericAPIView, ResponseMixin): @@ -69,9 +67,91 @@ class LoginApiView(generics.GenericAPIView, ResponseMixin): ) token = RefreshToken.for_user(user) - user_data['token'] = str(token) + user_data['token'] = str(token.access_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: + return self.error_response(data=str(e), message='xatolik') + + + +class AdminLoginApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = AdminLoginSerializer + queryset = User.objects.all() + + @swagger_auto_schema( + operation_description="Admin uchun login api", + responses={ + 200: openapi.Response( + schema=None, + description="Success", + examples={ + "application/json": { + "status_code": 200, + "success": "success", + "message": "Login muvaffaqiyalit amalga oshirildi", + "data": { + "token": "4jh4j3rbj2fkjb3kfjbwkfjb24kgjb34kgj3kjbkw..." + } + } + } + ), + 404: openapi.Response( + schema=None, + description="User not found", + examples={ + "application/json": { + "status_code": 404, + "success": "failure", + "message": "username yoki parol notog'ri", + "data": {} + } + } + ), + 400: openapi.Response( + schema=None, + description="Failue error", + examples={ + "application/json": { + "status_code": 400, + "success": "failure", + "message": "foydalanuvchi aktive emas", + "data": {}, + } + } + ), + 500: openapi.Response( + schema=None, + description="Server Error", + examples={ + "application/json": { + "status_code": 500, + "success": "error", + "message": "xatolik", + "data": "some error...", + } + } + ) + } + ) + def post(self, request): + try: + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): + username = serializer.validated_data.get('username') + password = serializer.validated_data.get('password') + user = User.objects.filter(username=username).first() + if not user or (user and user.check_password(password)): + return self.failure_response(message="username yoki parol notog'ri", data={}, status_code=404) + if not user.is_active: + return self.failure_response(message="foydalanuvchi aktive emas", data={}) + + token = RefreshToken.for_user(user) + return self.success_response( + message="Login muvaffaqiyalit amalga oshirildi", + data={"token": str(token.access_token)} + ) + except Exception as e: return self.error_response(data=str(e), message='xatolik') \ No newline at end of file