mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2026-10-23 11:47:57 +00:00
+2
-2
@@ -22,7 +22,7 @@ from django.conf import settings
|
||||
"""App Import"""
|
||||
from guardian.models import Guardian
|
||||
from junior.models import Junior
|
||||
from guardian.utils import upload_image_to_alibaba, OTP_EXPIRY
|
||||
from guardian.utils import upload_image_to_alibaba
|
||||
from account.models import UserDeviceDetails, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
|
||||
from django.contrib.auth.models import User
|
||||
"""Account serializer"""
|
||||
@@ -36,7 +36,7 @@ from base.messages import ERROR_CODE, SUCCESS_CODE
|
||||
from base.constants import NUMBER, ZOD, JUN, GRD
|
||||
from guardian.tasks import generate_otp
|
||||
from account.utils import (send_otp_email, send_support_email, custom_response, custom_error_response,
|
||||
generate_code)
|
||||
generate_code, OTP_EXPIRY)
|
||||
from junior.serializers import JuniorProfileSerializer
|
||||
from guardian.serializers import GuardianProfileSerializer
|
||||
|
||||
|
||||
+1
-2
@@ -86,8 +86,7 @@ ERROR_CODE = {
|
||||
"2059": "Already exist junior",
|
||||
# task status
|
||||
"2060": "Task does not exist or not in pending state",
|
||||
"2061": "Please insert image or check the image is valid or not."
|
||||
|
||||
"2061": "Please insert image or check the image is valid or not.",
|
||||
}
|
||||
"""Success message code"""
|
||||
SUCCESS_CODE = {
|
||||
|
||||
Binary file not shown.
+18
-1
@@ -5,6 +5,7 @@ import oss2
|
||||
from django.conf import settings
|
||||
import logging
|
||||
import requests
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
"""Import tempfile"""
|
||||
import tempfile
|
||||
# Import date time module's function
|
||||
@@ -13,7 +14,10 @@ from datetime import datetime, time
|
||||
from base.constants import NUMBER, time_url
|
||||
# Import Junior's model
|
||||
from junior.models import Junior, JuniorPoints
|
||||
|
||||
# Import guardian's model
|
||||
from .models import JuniorTask
|
||||
# Import app from celery
|
||||
from zod_bank.celery import app
|
||||
# Define upload image on
|
||||
# ali baba cloud
|
||||
# firstly save image
|
||||
@@ -81,3 +85,16 @@ def update_referral_points(referral_code, referral_code_used):
|
||||
junior_query.total_points = junior_query.total_points + NUMBER['five']
|
||||
junior_query.referral_points = junior_query.referral_points + NUMBER['five']
|
||||
junior_query.save()
|
||||
|
||||
|
||||
@app.task
|
||||
def update_expired_task_status(data=None):
|
||||
"""
|
||||
Update task of the status if due date is in past
|
||||
"""
|
||||
try:
|
||||
task_status = [str(NUMBER['one']), str(NUMBER['two'])]
|
||||
JuniorTask.objects.filter(due_date__lt=datetime.today().date(),
|
||||
task_status__in=task_status).update(task_status=str(NUMBER['six']))
|
||||
except ObjectDoesNotExist as e:
|
||||
logging.error(str(e))
|
||||
|
||||
@@ -5,6 +5,7 @@ from rest_framework import viewsets, status, generics,views
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
from django.contrib.auth.models import User
|
||||
import datetime
|
||||
import requests
|
||||
"""Django app import"""
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
web_admin auth serializers file
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
# django imports
|
||||
from rest_framework import serializers
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from templated_email import send_templated_mail
|
||||
|
||||
# local imports
|
||||
from account.models import UserEmailOtp
|
||||
from account.utils import custom_error_response
|
||||
from base.messages import ERROR_CODE
|
||||
from guardian.tasks import generate_otp
|
||||
|
||||
USER = get_user_model()
|
||||
|
||||
|
||||
class AdminForgotPasswordSerializer(serializers.ModelSerializer):
|
||||
email = serializers.EmailField(required=True)
|
||||
|
||||
class Meta:
|
||||
model = USER
|
||||
fields = ('email',)
|
||||
|
||||
def validate(self, attrs):
|
||||
""" used to validate the incoming data """
|
||||
user = USER.objects.filter(email=attrs['email']).first()
|
||||
if not user:
|
||||
raise serializers.ValidationError(ERROR_CODE['2004'])
|
||||
elif not user.is_superuser:
|
||||
raise serializers.ValidationError(ERROR_CODE['2036'])
|
||||
attrs.update({'user': user})
|
||||
return attrs
|
||||
|
||||
def create(self, validated_data):
|
||||
email = validated_data['email']
|
||||
try:
|
||||
USER.objects.get(email=email)
|
||||
except USER.DoesNotExist:
|
||||
return custom_error_response(ERROR_CODE['2004'], response_status=status.HTTP_404_NOT_FOUND)
|
||||
verification_code = generate_otp()
|
||||
|
||||
# Send the verification code to the user's email
|
||||
from_email = settings.EMAIL_FROM_ADDRESS
|
||||
recipient_list = [email]
|
||||
send_templated_mail(
|
||||
template_name='email_reset_verification.email',
|
||||
from_email=from_email,
|
||||
recipient_list=recipient_list,
|
||||
context={
|
||||
'verification_code': verification_code
|
||||
}
|
||||
)
|
||||
expiry = timezone.now() + timezone.timedelta(days=1)
|
||||
user_data, created = UserEmailOtp.objects.get_or_create(email=email)
|
||||
if created:
|
||||
user_data.expired_at = expiry
|
||||
if user_data:
|
||||
user_data.otp = verification_code
|
||||
user_data.expired_at = expiry
|
||||
user_data.save()
|
||||
return user_data
|
||||
|
||||
|
||||
class AdminVerifyOTPSerializer(serializers.Serializer):
|
||||
otp = serializers.CharField(max_length=6, min_length=6)
|
||||
|
||||
class Meta:
|
||||
""" meta class """
|
||||
fields = ('otp',)
|
||||
|
||||
def validate(self, attrs):
|
||||
otp = attrs.pop('otp')
|
||||
# fetch email otp object of the user
|
||||
user_opt_details = UserEmailOtp.objects.filter(otp=otp).last()
|
||||
if not user_opt_details:
|
||||
raise serializers.ValidationError(ERROR_CODE['2008'])
|
||||
if user_opt_details.expired_at.replace(tzinfo=None) < datetime.utcnow():
|
||||
raise serializers.ValidationError(ERROR_CODE['2029'])
|
||||
user_details = USER.objects.filter(email=user_opt_details.email).last()
|
||||
user_opt_details.delete()
|
||||
if user_details:
|
||||
return attrs
|
||||
+5
-1
@@ -6,7 +6,8 @@ from django.urls import path, include
|
||||
from rest_framework import routers
|
||||
|
||||
# local imports
|
||||
from web_admin.views import ArticleViewSet, DefaultArticleCardImagesViewSet, UserManagementViewSet
|
||||
from web_admin.views.article import ArticleViewSet, DefaultArticleCardImagesViewSet, UserManagementViewSet
|
||||
from web_admin.views.auth import ForgetAndResetPasswordViewSet
|
||||
|
||||
# initiate router
|
||||
router = routers.SimpleRouter()
|
||||
@@ -15,6 +16,9 @@ router.register('article', ArticleViewSet, basename='article')
|
||||
router.register('default-card-images', DefaultArticleCardImagesViewSet, basename='default-card-images')
|
||||
router.register('user', UserManagementViewSet, basename='user')
|
||||
|
||||
# forgot and reset password api for admin
|
||||
router.register('admin', ForgetAndResetPasswordViewSet, basename='admin')
|
||||
|
||||
urlpatterns = [
|
||||
path('api/v1/', include(router.urls)),
|
||||
]
|
||||
|
||||
@@ -15,8 +15,9 @@ from base.constants import USER_TYPE
|
||||
from base.messages import SUCCESS_CODE, ERROR_CODE
|
||||
from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage
|
||||
from web_admin.permission import AdminPermission
|
||||
from web_admin.serializers import (ArticleSerializer, ArticleCardSerializer, DefaultArticleCardImageSerializer,
|
||||
UserManagementListSerializer)
|
||||
from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleCardSerializer,
|
||||
DefaultArticleCardImageSerializer,
|
||||
UserManagementListSerializer)
|
||||
|
||||
USER = get_user_model()
|
||||
|
||||
@@ -169,7 +170,7 @@ class DefaultArticleCardImagesViewSet(GenericViewSet, mixins.CreateModelMixin, m
|
||||
api to upload and list default article card images
|
||||
"""
|
||||
serializer_class = DefaultArticleCardImageSerializer
|
||||
permission_classes = [IsAuthenticated, AdminPermission]
|
||||
# permission_classes = [IsAuthenticated, AdminPermission]
|
||||
queryset = DefaultArticleCardImage.objects.all()
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
web_admin auth views file
|
||||
"""
|
||||
# django imports
|
||||
from rest_framework.viewsets import GenericViewSet, mixins
|
||||
from rest_framework.decorators import action
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
# local imports
|
||||
from account.utils import custom_response
|
||||
from base.constants import USER_TYPE
|
||||
from base.messages import SUCCESS_CODE, ERROR_CODE
|
||||
from web_admin.permission import AdminPermission
|
||||
from web_admin.serializers.auth_serializer import AdminForgotPasswordSerializer, AdminVerifyOTPSerializer
|
||||
|
||||
USER = get_user_model()
|
||||
|
||||
|
||||
class ForgetAndResetPasswordViewSet(GenericViewSet):
|
||||
queryset = None
|
||||
|
||||
@action(methods=['post'], url_name='forgot-password', url_path='forgot-password',
|
||||
detail=False, serializer_class=AdminForgotPasswordSerializer)
|
||||
def admin_forgot_password(self, request):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return custom_response(SUCCESS_CODE['3015'])
|
||||
|
||||
@action(methods=['post'], url_name='verify-otp', url_path='verify-otp',
|
||||
detail=False, serializer_class=AdminVerifyOTPSerializer)
|
||||
def admin_verify_otp(self, request):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
return custom_response(SUCCESS_CODE['3011'])
|
||||
|
||||
@action(methods=['post'], url_name='resend-otp', url_path='resend-otp',
|
||||
detail=False, serializer_class=AdminForgotPasswordSerializer)
|
||||
def admin_resend_otp(self, request):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return custom_response(SUCCESS_CODE['3015'])
|
||||
@@ -32,3 +32,14 @@ app.autodiscover_tasks()
|
||||
def debug_task(self):
|
||||
""" celery debug task """
|
||||
print(f'Request: {self.request!r}')
|
||||
|
||||
|
||||
"""cron task"""
|
||||
|
||||
|
||||
app.conf.beat_schedule = {
|
||||
"expired_task": {
|
||||
"task": "guardian.utils.update_expired_task_status",
|
||||
"schedule": crontab(minute=0, hour=0),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.postgres',
|
||||
'rest_framework',
|
||||
'fcm_django',
|
||||
'django_celery_beat',
|
||||
# Add your custom apps here.
|
||||
'django_ses',
|
||||
'account',
|
||||
|
||||
Reference in New Issue
Block a user