diff --git a/core/apps/accounts/serializers/user.py b/core/apps/accounts/serializers/user.py index 5bc3536..8428432 100644 --- a/core/apps/accounts/serializers/user.py +++ b/core/apps/accounts/serializers/user.py @@ -80,4 +80,18 @@ class UserListSerializer(serializers.ModelSerializer): 'id': obj.role.id, 'role': obj.role.name, } - return None \ No newline at end of file + return None + + +class UserUpdatePasswordSerializer(serializers.Serializer): + current_password = serializers.CharField() + new_password = serializers.CharField() + confirm_new_password = serializers.CharField() + + def validate(self, data): + user = self.context.get('user') + if not user.check_password(data['current_password']): + raise serializers.ValidationError("Password incorrect") + if data['new_password'] != data['confirm_new_password']: + raise serializers.ValidationError("Ikkita parol bir xil bolishi kerak") + return data \ No newline at end of file diff --git a/core/apps/accounts/urls.py b/core/apps/accounts/urls.py index de6428e..c8f11c1 100644 --- a/core/apps/accounts/urls.py +++ b/core/apps/accounts/urls.py @@ -21,6 +21,7 @@ urlpatterns = [ path('list/', user_views.UserListApiView.as_view()), path('/', user_views.UserUpdateApiView.as_view()), path('permissions/', user_views.UserPermissionListApiView.as_view()), + path('update_password/', user_views.UpdateUserPasswordApiView.as_view()), ] )), path('role/', include( diff --git a/core/apps/accounts/views/user.py b/core/apps/accounts/views/user.py index d11066a..5bc76f2 100644 --- a/core/apps/accounts/views/user.py +++ b/core/apps/accounts/views/user.py @@ -109,4 +109,24 @@ class UserPermissionListApiView(generics.GenericAPIView): return Response( {'success': True, 'permissions': serializer.data}, status=200 - ) \ No newline at end of file + ) + + +class UpdateUserPasswordApiView(generics.GenericAPIView): + serializer_class = serializers.UserUpdatePasswordSerializer + queryset = User.objects.all() + permission_classes = [HasRolePermission] + + def patch(self, request): + user = request.user + serializer = self.serializer_class(data=request.data, context={'user': user}) + if serializer.is_valid(): + new_password = serializer.validated_data.get('new_password') + user.set_password(new_password) + user.save() + return Response({ + 'success': True, 'message': 'Foydalanuvchi paroli ozgartirildi', + }, status=200) + return Response({ + 'success': False, 'error': serializer.errors + }, status=400) \ No newline at end of file