コード例 #1
0
ファイル: views.py プロジェクト: jan-polaczek/Usamo_backend
class AdminUserDataEditView(views.APIView):
    permission_classes = [CanStaffVerifyUsers]

    @swagger_auto_schema(
        responses={
            '200': sample_message_response("Dane konta zostały zaktualizowane"),
            '400': "Błędy walidacji",
            '403': sample_error_response("Nie możesz edytować danych tego użytkownika"),
            '404': sample_error_response('Użytkownik o podanym id nie został znaleziony')
        },
        manual_parameters=[
            openapi.Parameter('pk', openapi.IN_PATH, type='string($uuid)',
                              description='String UUID będący id danego użytkownika')
        ],
        operation_description="Api dla admina do edycji danych użytkowników (w tym hasła).",
    )
    def patch(self, request, pk):
        try:
            account = Account.objects.get(pk=pk)
        except Account.DoesNotExist:
            return ErrorResponse('Użytkownik o podanym id nie został znaleziony', status.HTTP_404_NOT_FOUND)
        if account.type == AccountType.STANDARD.value:
            serializer = DefaultAccountSerializer(account, data=request.data, partial=True)
        elif account.type == AccountType.EMPLOYER.value:
            serializer = EmployerAccountSerializer(account, data=request.data, partial=True)
        elif account.type == AccountType.STAFF.value:
            return ErrorResponse("Nie możesz edytować danych tego użytkownika", status.HTTP_403_FORBIDDEN)

        if serializer.is_valid():
            serializer.update(account, serializer.validated_data)
            send_account_data_change_email(pk, request.data)
            return MessageResponse("Dane konta zostały zaktualizowane")
        else:
            return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)

    @swagger_auto_schema(
        responses={
            '200': sample_message_response("Konto zostało usunięte"),
            '403': sample_error_response("Nie możesz wykonać tej operacji"),
            '404': sample_error_response("Użytkownik o podanym id nie został znaleziony")
        },
        manual_parameters=[
            openapi.Parameter('pk', openapi.IN_PATH, type='string($uuid)',
                              description='String UUID będący id danego użytkownika')
        ],
        operation_description="Api dla admina do kasowania użytkowników. Nie można przez nie usuwać staffów.",
    )
    def delete(self, request, pk):
        try:
            account = Account.objects.get(pk=pk)
            if account.type == AccountType.STAFF.value:
                return ErrorResponse("Nie możesz wykonać tej operacji", status.HTTP_403_FORBIDDEN)
            account.delete()
            return MessageResponse("Konto zostało usunięte")
        except Account.DoesNotExist:
            return ErrorResponse("Użytkownik o podanym id nie został znaleziony", status.HTTP_404_NOT_FOUND)
コード例 #2
0
class PasswordChangeView(views.APIView):
    permission_classes = (IsAuthenticated, )

    @swagger_auto_schema(
        responses={
            '200': sample_message_response("Hasło zostało zmienione"),
            '400': "Błędy walidacji",
            '403': sample_error_response("Stare hasło jest niepoprawne")
        },
        request_body=PasswordChangeRequestSerializer,
        operation_description=
        "Api pozwalające użytkownikowi zmienić swoje hasło",
    )
    def patch(self, request):
        account = request.user
        serializer = PasswordChangeRequestSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        old_pass = request.data['old_password']
        new_pass = request.data['new_password']
        if check_password(old_pass, account.password):
            account.set_password(new_pass)
            account.save()
            account.auth_token_set.all().delete()
            return MessageResponse("Hasło zostało zmienione")
        return ErrorResponse("Stare hasło jest niepoprawne",
                             status.HTTP_403_FORBIDDEN)
コード例 #3
0
class TileView(views.APIView):
    permission_classes = [IsStaffMember]

    @swagger_auto_schema(
        manual_parameters=[Parameter('tile_id', IN_PATH, type='integer')],
        responses={
            200: '"message": "Kafelek o podanym id został zaktualizowany"',
            403: 'Forbidden - no permissions',
            404: '"error": "Nie znaleziono kafelka o podanym id"'
        })
    def put(self, request, tile_id):
        try:
            instance = Tile.objects.get(id=tile_id)
            serializer = TileSerializer(instance,
                                        data=request.data,
                                        partial=True)
            if serializer.is_valid():
                serializer.update(instance, serializer.validated_data)
                response_data = {
                    "message": "Kafelek o podanym id został zaktualizowany"
                }
                return Response(response_data, status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
        except ObjectDoesNotExist:
            return ErrorResponse("Nie znaleziono kafelka o podanym id",
                                 status.HTTP_404_NOT_FOUND)

    @swagger_auto_schema(
        manual_parameters=[
            Parameter('tile_id', IN_PATH, type='integer'),
        ],
        responses={
            200: sample_message_response('Kafelek został pomyślnie usunięty'),
            404: sample_message_response("Nie znaleziono kafelka o podanym id")
        })
    def delete(self, request, tile_id):
        try:
            instance = Tile.objects.get(pk=tile_id)
        except ObjectDoesNotExist:
            return ErrorResponse("Nie znaleziono kafelka o podanym id",
                                 status.HTTP_404_NOT_FOUND)
        instance.delete()
        return MessageResponse("Kafelek został pomyślnie usunięty")
コード例 #4
0
class PhoneContactView(views.APIView):
    permission_classes = [IsStaffBlogModerator]

    @swagger_auto_schema(
        manual_parameters=[
            Parameter('contact_id', IN_PATH, type='integer'),
        ],
        responses={
            200: sample_message_response('Kontakt został pomyślnie usunięty'),
            404:
            sample_message_response("Nie znaleziono kontaktu o podanym id")
        })
    def delete(self, request, contact_id):
        try:
            instance = PhoneContact.objects.get(pk=contact_id)
        except ObjectDoesNotExist:
            return ErrorResponse("Nie znaleziono kontaktu o podanym id",
                                 status.HTTP_404_NOT_FOUND)
        instance.delete()
        return MessageResponse("Kontakt został pomyślnie usunięty")
コード例 #5
0
class CVView(views.APIView):
    permissions_classes = [IsCVOwner | IsStaffResponsibleForCVs]

    @swagger_auto_schema(
        manual_parameters=[
            openapi.Parameter('cv_id', openapi.IN_PATH, type='string($uuid)',
                              description='String UUID będący id danego CV')
        ],
        responses={
            '200': sample_message_response("/media/cv_docs/2020/04/03/file_name.pdf"),
            '403': 'Nie masz uprawnień do wykonania tej czynności',
            '404': "Nie znaleziono CV. Upewnij się, że uwzględniono cv_id w url-u"
        },
        operation_description='Zwraca url-a do pdf zawierającego CV na podstawie zapisanych wcześniej danych'
    )
    def get(self, request, cv_id):
        try:
            cv = CV.objects.get(cv_id=cv_id)
            if not IsCVOwner().has_object_permission(request, self, cv) \
                    and not IsStaffResponsibleForCVs().has_object_permission(request, self, cv):
                return ErrorResponse("Nie masz uprawnień do wykonania tej czynności", status.HTTP_403_FORBIDDEN)
        except CV.DoesNotExist:
            return ErrorResponse("Nie znaleziono CV. Upewnij się, że uwzględniono cv_id w url-u", status.HTTP_404_NOT_FOUND)

        return Response({'url': cv.document.url}, status.HTTP_200_OK)

    @swagger_auto_schema(
        operation_description="Usuwa CV z bazy danych jeśli ono istnieje",
        manual_parameters=[
            openapi.Parameter('cv_id', openapi.IN_PATH, type='string($uuid)',
                              description='String UUID będący id danego CV')
        ],
        responses={
            '200': 'CV usunięto pomyślnie',
            '403': 'Nie masz uprawnień do wykonania tej czynności.',
            '404': "Nie znaleziono CV. Upewnij się, że uwzględniono cv_id w url-u"
        }
    )
    def delete(self, request, cv_id):
        try:
            cv = CV.objects.get(cv_id=cv_id)
            if not IsCVOwner().has_object_permission(request, self, cv) \
                    and not IsStaffResponsibleForCVs().has_object_permission(request, self, cv):
                return ErrorResponse("Nie masz uprawnień do wykonania tej czynności", status.HTTP_403_FORBIDDEN)
            cv.delete()
        except CV.DoesNotExist:
            return ErrorResponse("Nie znaleziono CV. Upewnij się, że uwzględniono cv_id w url-u", status.HTTP_404_NOT_FOUND)

        return MessageResponse('CV usunięto pomyślnie')
コード例 #6
0
ファイル: views.py プロジェクト: jan-polaczek/Usamo_backend
class StaffDataChangeView(views.APIView):
    permission_classes = (IsStaffMember, )

    @swagger_auto_schema(
        responses={
            '200': sample_message_response("Dane zostały pomyślnie zmienione"),
            '400': "Błędy walidacji"
        },
        request_body=StaffAccountSerializer,
        operation_description="Api pozwalające pracownikowi zmienić swoje dane (do hasła jest inne api). Uprawnień nie można zmieniać",
    )
    def patch(self, request):
        account = request.user
        serializer = StaffAccountSerializer(account, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.update(account, serializer.validated_data)
        else:
            return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)

        return MessageResponse("Dane zostały pomyślnie zmienione")
コード例 #7
0
class UserDataView(views.APIView):
    permission_classes = [IsAuthenticated]

    def get_serializer_class(self, request):
        if request.user.type == AccountType.STANDARD.value:
            serializer = DefaultAccountDetailSerializer(instance=request.user)
            user_type = AccountType.STANDARD.value
        elif request.user.type == AccountType.EMPLOYER.value:
            serializer = EmployerDetailSerializer(instance=request.user)
            user_type = AccountType.EMPLOYER.value
        else:
            serializer = StaffDetailSerializer(instance=request.user)
            user_type = AccountType.STAFF.value

        return serializer, user_type

    @swagger_auto_schema(
        operation_description="Zwraca dane aktualnego użytkownika. "
        "Przykład jest dla użytkownika standardowego",
        responses={200: DefaultAccountSerializer})
    def get(self, request):
        serializer, user_type = self.get_serializer_class(request)
        data = serializer.data
        user_id = str(request.user.id)
        data['is_subscribed'] = False
        return JsonResponse({
            'type': dict(ACCOUNT_TYPE_CHOICES)[user_type],
            'data': data
        })

    @swagger_auto_schema(
        responses={
            '200': sample_message_response("Konto zostało pomyślnie usunięte")
        },
        operation_description=
        "Api pozwalające użytkownikowi usunąć swoje konto",
    )
    def delete(self, request):
        account = request.user
        account.delete()
        return MessageResponse("Konto zostało pomyślnie usunięte")