old_console/users/api.py
2024-11-02 14:12:45 +03:00

54 lines
2.1 KiB
Python

import logging
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.exceptions import ValidationError
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from core.mixins import ApiPermissionCheckMixin
from core.services.pagination import BasicPagination
from perms.models import Perm
from users.models import UserInfo
from users.serializers import UserInfoSerializer, UserInfoUpdateSerializer, UserSerializers
from users.services.userinfo import delete_user
LOGGER = logging.getLogger(__name__)
class NotDeletedUsersViewSet(ModelViewSet):
""" ViewSet for handling all operations with users """
filters = []
serializer_class = UserInfoSerializer
queryset = UserInfo.objects.exclude(user__username__contains='deleted')
console_permissions = {'list': [Perm.can_view_user_list], 'create': [Perm.can_add_user],
'retrieve': [Perm.can_view_user], 'update': [Perm.can_edit_user],
'partial_update': [Perm.can_edit_user],
"delete": [Perm.can_delete_user]}
pagination_class = BasicPagination
ordering_fields = ['user__id', 'comment', 'user__username', 'user__first_name', 'user__is_active', 'user__email']
class Meta:
model = UserInfo
def destroy(self, request, *args, **kwargs):
target_user = User.objects.get(pk=kwargs['pk'])
if request.user == target_user:
raise ValidationError({'details': 'You cannot delete your account'})
delete_user(user_deleting=target_user)
return Response(status=status.HTTP_204_NO_CONTENT)
def get_serializer_class(self):
if self.action == 'partial_update':
return UserInfoUpdateSerializer
else:
return UserInfoSerializer
@action(detail=False, methods=['GET'])
def whoami(self, request, *args, **kwargs):
user_serialize = UserSerializers(get_object_or_404(User, pk=request.user.pk))
return Response(user_serialize.data)