jira-25 setting API

This commit is contained in:
jain
2023-07-10 19:16:45 +05:30
parent 03fb774a7b
commit 1ae81d4134
9 changed files with 164 additions and 48 deletions

View File

@ -2,9 +2,16 @@
from django.contrib import admin from django.contrib import admin
"""Import django app""" """Import django app"""
from .models import UserProfile, UserEmailOtp, UserPhoneOtp, DefaultTaskImages from .models import UserEmailOtp, UserPhoneOtp, DefaultTaskImages, UserNotification
# Register your models here. # Register your models here.
@admin.register(UserNotification)
class UserNotificationAdmin(admin.ModelAdmin):
"""User profile admin"""
list_display = ['user', 'push_notification', 'email_notification', 'sms_notification']
def __str__(self):
return self.image_url
@admin.register(DefaultTaskImages) @admin.register(DefaultTaskImages)
class DefaultTaskImagesAdmin(admin.ModelAdmin): class DefaultTaskImagesAdmin(admin.ModelAdmin):
"""User profile admin""" """User profile admin"""
@ -13,14 +20,6 @@ class DefaultTaskImagesAdmin(admin.ModelAdmin):
def __str__(self): def __str__(self):
return self.image_url return self.image_url
@admin.register(UserProfile)
class UserProfileAdmin(admin.ModelAdmin):
"""User profile admin"""
list_display = ['user']
def __str__(self):
return self.user__email
@admin.register(UserEmailOtp) @admin.register(UserEmailOtp)
class UserEmailOtpAdmin(admin.ModelAdmin): class UserEmailOtpAdmin(admin.ModelAdmin):
"""User Email otp admin""" """User Email otp admin"""

View File

@ -0,0 +1,31 @@
# Generated by Django 4.2.2 on 2023-07-10 12:40
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('account', '0004_userdelete'),
]
operations = [
migrations.CreateModel(
name='UserNotification',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('push_notification', models.BooleanField(default=True)),
('email_notification', models.BooleanField(default=True)),
('sms_notification', models.BooleanField(default=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user_notification', to=settings.AUTH_USER_MODEL)),
],
options={
'db_table': 'user_notification',
},
),
]

View File

@ -72,6 +72,8 @@ class UserEmailOtp(models.Model):
class Meta(object): class Meta(object):
""" Meta information """ """ Meta information """
db_table = 'user_email_otp' db_table = 'user_email_otp'
verbose_name = 'User Email OTP'
verbose_name_plural = 'User Email OTP'
def __str__(self): def __str__(self):
"""return phone as an object""" """return phone as an object"""
@ -113,3 +115,28 @@ class UserDelete(models.Model):
def __str__(self): def __str__(self):
return self.user.email return self.user.email
class UserNotification(models.Model):
"""
User notification details
"""
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_notification')
"""Push Notification"""
push_notification = models.BooleanField(default=True)
"""Email Notification"""
email_notification = models.BooleanField(default=True)
"""SMS Notification"""
sms_notification = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta(object):
""" Meta information """
db_table = 'user_notification'
verbose_name = 'User Notification'
verbose_name_plural = 'User Notification'
def __str__(self):
return self.user.email

View File

@ -7,7 +7,7 @@ from rest_framework_simplejwt.tokens import RefreshToken
"""App import""" """App import"""
from guardian.models import Guardian from guardian.models import Guardian
from junior.models import Junior from junior.models import Junior
from account.models import UserProfile, UserEmailOtp, UserPhoneOtp, DefaultTaskImages, UserDelete from account.models import UserEmailOtp, DefaultTaskImages, UserDelete, UserNotification
from base.constants import GUARDIAN, JUNIOR, SUPERUSER from base.constants import GUARDIAN, JUNIOR, SUPERUSER
from base.messages import ERROR_CODE_REQUIRED, ERROR_CODE, SUCCESS_CODE, STATUS_CODE_ERROR from base.messages import ERROR_CODE_REQUIRED, ERROR_CODE, SUCCESS_CODE, STATUS_CODE_ERROR
@ -230,36 +230,64 @@ class UserDeleteSerializer(serializers.ModelSerializer):
user = self.context['user'] user = self.context['user']
user_type = str(self.context['user_type']) user_type = str(self.context['user_type'])
data = validated_data.get('reason') data = validated_data.get('reason')
passwd = self.context['password']
random_num = random.randint(0,10000) random_num = random.randint(0,10000)
user_tb = User.objects.filter(id=user.id).last() user_tb = User.objects.filter(id=user.id).last()
user_type_data = UserEmailOtp.objects.filter(email=user.email).last() if user_tb.check_password(passwd):
if user_type == '1' and user_type_data.user_type == '1': user_type_data = UserEmailOtp.objects.filter(email=user.email).last()
junior_data = Junior.objects.filter(auth__email=user_tb.email).first() if user_type == '1' and user_type_data.user_type == '1':
if junior_data: junior_data = Junior.objects.filter(auth__email=user_tb.email).first()
junior_data.is_active = False if junior_data:
junior_data.is_verified = False junior_data.is_active = False
junior_data.guardian_code = '{}' junior_data.is_verified = False
junior_data.save() junior_data.guardian_code = '{}'
elif user_type == '2' and user_type_data.user_type == '2': junior_data.save()
guardian_data = Guardian.objects.filter(user__email=user_tb.email).first() elif user_type == '2' and user_type_data.user_type == '2':
if guardian_data: guardian_data = Guardian.objects.filter(user__email=user_tb.email).first()
guardian_data.is_active = False if guardian_data:
guardian_data.is_verified = False guardian_data.is_active = False
guardian_data.save() guardian_data.is_verified = False
jun_data = Junior.objects.filter(guardian_code__icontains=str(guardian_data.guardian_code)) guardian_data.save()
for data in jun_data: jun_data = Junior.objects.filter(guardian_code__icontains=str(guardian_data.guardian_code))
data.guardian_code.remove(guardian_data.guardian_code) for data in jun_data:
data.save() data.guardian_code.remove(guardian_data.guardian_code)
data.save()
else:
raise serializers.ValidationError({"details":ERROR_CODE['2030'],"code":"400", "status":"failed"})
user_tb.email = str(random_num) + str('@D_') + '{}'.format(user_tb.username).lower()
user_tb.username = str(random_num) + str('@D_') + '{}'.format(user_tb.username).lower()
user_tb.password = 'None'
d_email = user_tb.email
o_mail = user.email
instance = UserDelete.objects.create(user=user_tb, d_email=d_email, old_email=o_mail,
is_active=True, reason=data)
user_tb.save()
return instance
else: else:
raise serializers.ValidationError({"details":ERROR_CODE['2030'],"code":"400", "status":"failed"}) raise serializers.ValidationError({"details": ERROR_CODE['2031'], "code": "400", "status": "failed"})
user_tb.email = str(random_num) + str('@D_') + '{}'.format(user_tb.username).lower()
user_tb.username = str(random_num) + str('@D_') + '{}'.format(user_tb.username).lower()
user_tb.password = 'None'
d_email = user_tb.email
o_mail = user.email
instance = UserDelete.objects.create(user=user_tb, d_email=d_email, old_email=o_mail,
is_active=True, reason=data)
user_tb.save()
class UserNotificationSerializer(serializers.ModelSerializer):
"""User Notification serializer"""
class Meta(object):
"""Meta info"""
model = UserNotification
fields = '__all__'
class UpdateUserNotificationSerializer(serializers.ModelSerializer):
"""Update User Notification serializer"""
class Meta(object):
"""Meta info"""
model = UserNotification
fields = ['push_notification', 'email_notification', 'sms_notification']
def create(self, validated_data):
instance = UserNotification.objects.filter(user=self.context).last()
instance.push_notification = validated_data.get('push_notification',instance.push_notification)
instance.email_notification = validated_data.get('email_notification', instance.email_notification)
instance.sms_notification = validated_data.get('sms_notification', instance.sms_notification)
instance.save()
return instance return instance

View File

@ -7,7 +7,8 @@ from rest_framework import routers
from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp, from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp,
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView, UpdateProfileImage, ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView, UpdateProfileImage,
GoogleLoginViewSet, SigninWithApple, ProfileAPIViewSet, UploadImageAPIViewSet, GoogleLoginViewSet, SigninWithApple, ProfileAPIViewSet, UploadImageAPIViewSet,
DefaultImageAPIViewSet, DeleteUserProfileAPIViewSet) DefaultImageAPIViewSet, DeleteUserProfileAPIViewSet, UserNotificationAPIViewSet,
UpdateUserNotificationAPIViewSet)
"""Router""" """Router"""
router = routers.SimpleRouter() router = routers.SimpleRouter()
@ -31,6 +32,10 @@ router.register('upload-default-task-image', UploadImageAPIViewSet, basename='up
router.register('default-task-image', DefaultImageAPIViewSet, basename='default-task-image') router.register('default-task-image', DefaultImageAPIViewSet, basename='default-task-image')
"""Delete user account""" """Delete user account"""
router.register('delete', DeleteUserProfileAPIViewSet, basename='delete') router.register('delete', DeleteUserProfileAPIViewSet, basename='delete')
"""user account notification"""
router.register('user-notification', UserNotificationAPIViewSet, basename='user-notification')
"""update user account notification"""
router.register('update-user-notification', UpdateUserNotificationAPIViewSet, basename='update-user-notification')
"""Define url pattern""" """Define url pattern"""
urlpatterns = [ urlpatterns = [
path('api/v1/', include(router.urls)), path('api/v1/', include(router.urls)),

View File

@ -12,13 +12,14 @@ from guardian.utils import upload_image_to_alibaba
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from guardian.models import Guardian from guardian.models import Guardian
from junior.models import Junior from junior.models import Junior
from account.models import UserProfile, UserPhoneOtp, UserEmailOtp, DefaultTaskImages from account.models import UserProfile, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
from django.contrib.auth.models import User from django.contrib.auth.models import User
"""Account serializer""" """Account serializer"""
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer, from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer, ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer,
GoogleLoginSerializer, UpdateGuardianImageSerializer, UpdateJuniorProfileImageSerializer, GoogleLoginSerializer, UpdateGuardianImageSerializer, UpdateJuniorProfileImageSerializer,
DefaultTaskImagesSerializer, DefaultTaskImagesDetailsSerializer, UserDeleteSerializer) DefaultTaskImagesSerializer, DefaultTaskImagesDetailsSerializer, UserDeleteSerializer,
UserNotificationSerializer, UpdateUserNotificationSerializer)
from rest_framework_simplejwt.tokens import RefreshToken from rest_framework_simplejwt.tokens import RefreshToken
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
from guardian.tasks import generate_otp from guardian.tasks import generate_otp
@ -425,12 +426,37 @@ class DeleteUserProfileAPIViewSet(viewsets.GenericViewSet):
@action(detail=False, methods=['POST'], url_path='user-account',serializer_class=UserDeleteSerializer, @action(detail=False, methods=['POST'], url_path='user-account',serializer_class=UserDeleteSerializer,
permission_classes=[IsAuthenticated]) permission_classes=[IsAuthenticated])
def account(self, request): def account(self, request):
print("request.data===>",request.data)
print("request.user===>", request.user)
user_type = str(request.data['user_type']) user_type = str(request.data['user_type'])
password = request.data['password']
serializer = self.get_serializer(data=request.data, context={'request': request, 'user': request.user, serializer = self.get_serializer(data=request.data, context={'request': request, 'user': request.user,
'user_type':user_type}) 'user_type':user_type,
'password':password})
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()
return custom_response(SUCCESS_CODE['3005'], response_status=status.HTTP_200_OK) return custom_response(SUCCESS_CODE['3005'], response_status=status.HTTP_200_OK)
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
class UserNotificationAPIViewSet(viewsets.ModelViewSet):
"""Profile viewset"""
queryset = UserNotification.objects.all()
serializer_class = UserNotificationSerializer
def list(self, request, *args, **kwargs):
"""profile view"""
queryset = self.queryset.filter(user=request.user)
serializer = UserNotificationSerializer(queryset, many=True)
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
class UpdateUserNotificationAPIViewSet(viewsets.ModelViewSet):
"""Profile viewset"""
serializer_class = UpdateUserNotificationSerializer
def create(self, request, *args, **kwargs):
"""profile view"""
serializer = UpdateUserNotificationSerializer(data=request.data,
context=request.user)
if serializer.is_valid():
serializer.save()
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
return custom_error_response(serializer.error, response_status=status.HTTP_400_BAD_REQUEST)

View File

@ -53,7 +53,8 @@ ERROR_CODE = {
"2027": "data should contain `identityToken`", "2027": "data should contain `identityToken`",
"2028": "You are not authorized person to sign up on this platform", "2028": "You are not authorized person to sign up on this platform",
"2029": "Validity of otp verification is expired", "2029": "Validity of otp verification is expired",
"2030": "Use correct user type and token" "2030": "Use correct user type and token",
"2031":"Invalid password"
} }
SUCCESS_CODE = { SUCCESS_CODE = {
# Success code for password # Success code for password

View File

@ -8,7 +8,7 @@ from django.db import transaction
from django.contrib.auth.models import User from django.contrib.auth.models import User
"""Import Django app""" """Import Django app"""
from .models import Guardian, JuniorTask from .models import Guardian, JuniorTask
from account.models import UserProfile, UserEmailOtp from account.models import UserProfile, UserEmailOtp, UserNotification
from account.serializers import JuniorSerializer from account.serializers import JuniorSerializer
from junior.serializers import JuniorDetailSerializer from junior.serializers import JuniorDetailSerializer
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
@ -36,7 +36,7 @@ class UserSerializer(serializers.ModelSerializer):
try: try:
"""Create user profile""" """Create user profile"""
user = User.objects.create_user(username=email, email=email, password=password) user = User.objects.create_user(username=email, email=email, password=password)
UserProfile.objects.create(user=user, user_type=user_type) UserNotification.objects.create(user=user)
if user_type == '1': if user_type == '1':
Junior.objects.create(auth=user, junior_code=''.join([str(random.randrange(9)) for _ in range(6)]), Junior.objects.create(auth=user, junior_code=''.join([str(random.randrange(9)) for _ in range(6)]),
referral_code=''.join([str(random.randrange(9)) for _ in range(6)])) referral_code=''.join([str(random.randrange(9)) for _ in range(6)]))

View File

@ -12,7 +12,7 @@ from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializ
from .models import Guardian, JuniorTask from .models import Guardian, JuniorTask
from junior.models import Junior, JuniorPoints from junior.models import Junior, JuniorPoints
from junior.serializers import JuniorDetailSerializer from junior.serializers import JuniorDetailSerializer
from account.models import UserEmailOtp from account.models import UserEmailOtp, UserNotification
from .tasks import generate_otp from .tasks import generate_otp
from account.utils import send_otp_email from account.utils import send_otp_email
from account.utils import custom_response, custom_error_response from account.utils import custom_response, custom_error_response
@ -92,7 +92,6 @@ class TaskListAPIView(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
"""Create guardian profile""" """Create guardian profile"""
status_value = self.request.GET.get('status') status_value = self.request.GET.get('status')
print("status_value==>",status_value,'===>',type(status_value))
if str(status_value) == '0': if str(status_value) == '0':
queryset = JuniorTask.objects.filter(guardian__user=request.user).order_by('created_at') queryset = JuniorTask.objects.filter(guardian__user=request.user).order_by('created_at')
else: else: