From e441d3eedc2c60d355efbf1226ed796e0965f40b Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Sun, 15 Nov 2020 15:11:20 +0330 Subject: [PATCH] user inquiry with phone number --- apps/users/serializers.py | 19 +++++++++++++++++++ apps/users/views.py | 8 +++++++- gooyal_accounts/urls.py | 3 ++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/apps/users/serializers.py b/apps/users/serializers.py index a30ffbb..74c948f 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -79,6 +79,25 @@ class RequestOTPSerializer(serializers.ModelSerializer): return result +class UserInquirySerializer(serializers.ModelSerializer): + phone_number = serializers.CharField(required=True) + + class Meta: + model = User + fields = ('avatar', 'name', 'username', "first_name", "last_name", "uuid", 'phone_number') + read_only_fields = ['avatar', 'name', 'username', 'first_name', 'last_name', "uuid"] + + def save(self, **kwargs): + # TODO: move it to query set + validated_data = self.validated_data + user = User.objects.filter(phone_number=validated_data['phone_number']).first() + if not user: + user = User.objects.create_user(**validated_data) + + self.instance = user + return user + + class ChangePasswordSerializer(serializers.Serializer): old_password = serializers.CharField(required=True) old_password_field = serializers.CharField(default='password') diff --git a/apps/users/views.py b/apps/users/views.py index 386d04d..1c7ec98 100644 --- a/apps/users/views.py +++ b/apps/users/views.py @@ -13,7 +13,7 @@ from apps.users.forms import OTPAuthenticationForm from apps.users.models import User from apps.users.provinces_and_cities import State from apps.users.serializers import PublicUserSerializer, AccountSerializer, RequestOTPSerializer, \ - ChangePasswordSerializer + ChangePasswordSerializer, UserInquirySerializer UserModel = get_user_model() @@ -60,6 +60,12 @@ class RequestOTPView(generics.CreateAPIView): required_scopes = [] +class UserInquiryView(generics.CreateAPIView): + serializer_class = UserInquirySerializer + permission_classes = [IsAuthenticatedOrTokenHasScope] + required_scopes = ['accounts.profile:inquiry'] + + class ChangePasswordView(generics.UpdateAPIView): permission_classes = [IsAuthenticatedOrTokenHasScope] serializer_class = ChangePasswordSerializer diff --git a/gooyal_accounts/urls.py b/gooyal_accounts/urls.py index 603dff1..57c413b 100644 --- a/gooyal_accounts/urls.py +++ b/gooyal_accounts/urls.py @@ -24,7 +24,7 @@ from django.contrib import admin from apps.transactions.views import TransactionList, TransactionDetail, TransactionPay, TransactionReceipt, \ WithdrawVerify, WithdrawSubmit, DepositSubmit, DepositVerify from apps.users.views import UserListView, UserDetailView, AccountView, RequestOTPView, ChangePasswordView, \ - OTPLoginView, home, ProvinceApiView + OTPLoginView, home, ProvinceApiView, UserInquiryView from django.contrib.auth import urls as auth_urls # Setup the URLs and include login URLs for the browsable API. @@ -46,6 +46,7 @@ urlpatterns = [ path('request_otp/', RequestOTPView.as_view(), name='register'), path('change_password/', ChangePasswordView.as_view(), name='change_password'), path('province', ProvinceApiView.as_view(), name='province'), + path('inquiry', UserInquiryView.as_view(), name='inquiry'), path('transactions/', TransactionList.as_view(), name='transactions'), path('transactions/', TransactionDetail.as_view(), name='transaction_detail'),