bot.views   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 24
dl 0
loc 38
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A TgUserUpdateView.perform_update() 0 5 1
A TgUserUpdateView.get_object() 0 6 1
A TgUserUpdateView.patch() 0 2 1
1
from rest_framework import permissions, generics, mixins
2
3
from bot.models import TgUser
4
from bot.serializers import TgUserSerializer
5
from bot.tg.client import TgClient
6
from todolist import settings
7
8
9
class TgUserUpdateView(mixins.UpdateModelMixin, generics.GenericAPIView):
10
    """Представление для обработки запросов на эндпоинт PATCH: /bot/verify
11
12
    Верификация пользователя в Telegram чате
13
    """
14
15
    queryset = TgUser.objects.all()
16
    model = TgUser
17
    permission_classes = [permissions.IsAuthenticated]
18
    serializer_class = TgUserSerializer
19
20
    #: Переопределяем метод для получения объекта TgUser не по pk, а по полю 'verification_code'
21
    def get_object(self):
22
        queryset = self.filter_queryset(self.get_queryset())
23
        filter_kwargs = {'verification_code': self.request.data['verification_code']}
24
        obj = generics.get_object_or_404(queryset, **filter_kwargs)
25
        self.check_object_permissions(self.request, obj)
26
        return obj
27
28
    #: Реализуем метод PATCH
29
    def patch(self, request, *args, **kwargs):
30
        return self.partial_update(request, *args, **kwargs)
31
32
    #: Переопределяем метод для реализации отправки сообщения об удачной верификации Telegram пользователя
33
    def perform_update(self, serializer):
34
        tg_user: TgUser = serializer.save()
35
        TgClient(token=settings.TG_TOKEN).send_message(
36
            chat_id=tg_user.tg_id,
37
            text='[verification was successful]'
38
        )
39