list of the task and task table

This commit is contained in:
jain
2023-07-04 18:26:00 +05:30
parent 376bb89f20
commit 5e5161a77e
13 changed files with 304 additions and 31 deletions

View File

@ -126,12 +126,11 @@ class GuardianSerializer(serializers.ModelSerializer):
first_name = serializers.SerializerMethodField('get_first_name') first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name') last_name = serializers.SerializerMethodField('get_last_name')
auth_token = serializers.SerializerMethodField('get_auth_token') auth_token = serializers.SerializerMethodField('get_auth_token')
refresh_token = serializers.SerializerMethodField('get_refresh_token')
def get_auth_token(self, obj): def get_auth_token(self, obj):
return get_token()['access'] refresh = RefreshToken.for_user(obj.user)
def get_refresh_token(self, obj): access_token = str(refresh.access_token)
return get_token()['refresh'] return access_token
def get_user_type(self, obj): def get_user_type(self, obj):
@ -153,7 +152,7 @@ class GuardianSerializer(serializers.ModelSerializer):
class Meta(object): class Meta(object):
"""Meta info""" """Meta info"""
model = Guardian model = Guardian
fields = ['auth_token', 'refresh_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'family_name', 'gender', 'dob', fields = ['id', 'auth_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'family_name', 'gender', 'dob',
'referral_code', 'is_active', 'is_complete_profile', 'passcode', 'image', 'referral_code', 'is_active', 'is_complete_profile', 'passcode', 'image',
'created_at', 'updated_at', 'user_type'] 'created_at', 'updated_at', 'user_type']
@ -165,12 +164,12 @@ class JuniorSerializer(serializers.ModelSerializer):
first_name = serializers.SerializerMethodField('get_first_name') first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name') last_name = serializers.SerializerMethodField('get_last_name')
auth_token = serializers.SerializerMethodField('get_auth_token') auth_token = serializers.SerializerMethodField('get_auth_token')
refresh_token = serializers.SerializerMethodField('get_refresh_token')
def get_auth_token(self, obj): def get_auth_token(self, obj):
return get_token()['access'] print("obj===>",obj,'===>',type(obj))
def get_refresh_token(self, obj): refresh = RefreshToken.for_user(obj.auth)
return get_token()['refresh'] access_token = str(refresh.access_token)
return access_token
def get_user_type(self, obj): def get_user_type(self, obj):
return JUNIOR return JUNIOR
@ -187,7 +186,7 @@ class JuniorSerializer(serializers.ModelSerializer):
class Meta(object): class Meta(object):
"""Meta info""" """Meta info"""
model = Junior model = Junior
fields = ['auth_token', 'refresh_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob', fields = ['id', 'auth_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob',
'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image', 'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image',
'updated_at', 'user_type'] 'updated_at', 'user_type']

View File

@ -35,6 +35,16 @@ GENDERS = (
('1', 'Male'), ('1', 'Male'),
('2', 'Female') ('2', 'Female')
) )
TASK_STATUS = (
('1', 'pending'),
('2', 'in-progress'),
('3', 'rejected'),
('4', 'requested'),
('5', 'completed')
)
PENDING = 'pending'
TASK_POINTS = 5
# duplicate name used defined in constant PROJECT_NAME # duplicate name used defined in constant PROJECT_NAME
PROJECT_NAME = 'Zod Bank' PROJECT_NAME = 'Zod Bank'
GUARDIAN = 'guardian' GUARDIAN = 'guardian'

View File

@ -50,7 +50,8 @@ ERROR_CODE = {
"2024": "Email not verified", "2024": "Email not verified",
"2025": "Invalid input. Expected a list of strings.", "2025": "Invalid input. Expected a list of strings.",
"2026": "New password should not same as old password", "2026": "New password should not same as old password",
"2027": "data should contain `identityToken`" "2027": "data should contain `identityToken`",
"2028": "You are not authorized person to sign up on this platform"
} }
SUCCESS_CODE = { SUCCESS_CODE = {
# Success code for password # Success code for password
@ -79,7 +80,8 @@ SUCCESS_CODE = {
"3014": "Password has been updated successfully.", "3014": "Password has been updated successfully.",
"3015": "Verification code sent on your email.", "3015": "Verification code sent on your email.",
"3016": "Send otp on your Email successfully", "3016": "Send otp on your Email successfully",
"3017": "Profile image update successfully" "3017": "Profile image update successfully",
"3018": "Created task successfully"
} }
STATUS_CODE_ERROR = { STATUS_CODE_ERROR = {

View File

@ -2,7 +2,7 @@
"""Third party Django app""" """Third party Django app"""
from django.contrib import admin from django.contrib import admin
"""Import Django app""" """Import Django app"""
from .models import Guardian from .models import Guardian, JuniorTask
# Register your models here. # Register your models here.
@admin.register(Guardian) @admin.register(Guardian)
class GuardianAdmin(admin.ModelAdmin): class GuardianAdmin(admin.ModelAdmin):
@ -12,3 +12,12 @@ class GuardianAdmin(admin.ModelAdmin):
def __str__(self): def __str__(self):
"""Return email id""" """Return email id"""
return self.user__email return self.user__email
@admin.register(JuniorTask)
class TaskAdmin(admin.ModelAdmin):
"""Junior Admin"""
list_display = ['task_name', 'task_status']
def __str__(self):
"""Return email id"""
return str(self.task_name) + str(self.points)

View File

@ -0,0 +1,36 @@
# Generated by Django 4.2.2 on 2023-07-04 09:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('junior', '0006_alter_junior_country_name'),
('guardian', '0007_alter_guardian_country_name'),
]
operations = [
migrations.CreateModel(
name='JuniorTask',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('task_name', models.CharField(max_length=100)),
('task_description', models.CharField(max_length=500)),
('points', models.IntegerField(default=5)),
('due_date', models.DateField(blank=True, null=True)),
('image', models.ImageField(blank=True, default=None, null=True, upload_to='')),
('task_status', models.CharField(blank=True, choices=[('1', 'pending'), ('2', 'in-progress'), ('3', 'rejected'), ('4', 'requested'), ('5', 'completed')], default='pending', max_length=15, null=True)),
('is_active', models.BooleanField(default=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('guardian', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='guardian', to='guardian.guardian', verbose_name='Guardian')),
('junior', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='junior', to='junior.junior', verbose_name='Junior')),
],
options={
'verbose_name': 'Junior Task',
'db_table': 'junior_task',
},
),
]

View File

@ -3,7 +3,8 @@
from django.db import models from django.db import models
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
"""Import Django app""" """Import Django app"""
from base.constants import GENDERS from base.constants import GENDERS, TASK_STATUS, PENDING, TASK_POINTS
from junior.models import Junior
User = get_user_model() User = get_user_model()
# Create your models here. # Create your models here.
@ -41,3 +42,29 @@ class Guardian(models.Model):
def __str__(self): def __str__(self):
"""Return email id""" """Return email id"""
return f'{self.user}' return f'{self.user}'
class JuniorTask(models.Model):
"""Guardian model"""
guardian = models.ForeignKey(Guardian, on_delete=models.CASCADE, related_name='guardian', verbose_name='Guardian')
task_name = models.CharField(max_length=100)
task_description = models.CharField(max_length=500)
points = models.IntegerField(default=TASK_POINTS)
due_date = models.DateField(auto_now_add=False, null=True, blank=True)
image = models.ImageField(null=True, blank=True, default=None)
junior = models.ForeignKey(Junior, on_delete=models.CASCADE, related_name='junior', verbose_name='Junior')
task_status = models.CharField(choices=TASK_STATUS, max_length=15, null=True, blank=True, default=PENDING)
is_active = models.BooleanField(default=True)
"""Profile created and updated time"""
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta(object):
""" Meta class """
db_table = 'junior_task'
verbose_name = 'Junior Task'
def __str__(self):
"""Return email id"""
return f'{self.task_name}'

View File

@ -6,9 +6,13 @@ from rest_framework import serializers
from rest_framework_simplejwt.tokens import RefreshToken from rest_framework_simplejwt.tokens import RefreshToken
from django.db import transaction from django.db import transaction
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.validators import URLValidator
from django.core.exceptions import ValidationError
"""Import Django app""" """Import Django app"""
from .models import Guardian from .models import Guardian, JuniorTask
from account.models import UserProfile, UserEmailOtp from account.models import UserProfile, UserEmailOtp
from account.serializers import JuniorSerializer
from junior.serializers import JuniorDetailSerializer
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
from .utils import upload_image_to_alibaba from .utils import upload_image_to_alibaba
from junior.models import Junior from junior.models import Junior
@ -134,3 +138,81 @@ class CreateGuardianSerializer(serializers.ModelSerializer):
with transaction.atomic(): with transaction.atomic():
instance = super().save(**kwargs) instance = super().save(**kwargs)
return instance return instance
class ImageField(serializers.Field):
def to_representation(self, value):
return value
def to_internal_value(self, data):
# If data is a valid URL, return it as is
if validators.URLValidator()(data):
return data
# else:
# raise serializers.ValidationError("Enter a valid URL.")
class TaskSerializer(serializers.ModelSerializer):
class Meta(object):
model = JuniorTask
fields = ['task_name','task_description','points', 'due_date', 'junior', 'image']
def validate_image(self, value):
if 'http' in str(value):
print("999999999999")
return value
else:
print("00000000000000000")
filename = f"images/{value.name}"
image_url = upload_image_to_alibaba(value, filename)
return image_url
def create(self, validated_data):
print("validated_data NOW===>", validated_data, '===>', type(validated_data))
validated_data['guardian'] = Guardian.objects.filter(user=self.context['user']).last()
# images = self.context['image']
# if 'http' in str(images):
# print("999999999999")
# validated_data['image'] = images
# else:
# print("00000000000000000")
# filename = f"images/{images.name}"
# image_url = upload_image_to_alibaba(images, filename)
# validated_data['image'] = image_url
print("validated_data NOW===>", validated_data, '===>', type(validated_data))
instance = JuniorTask.objects.create(**validated_data)
return instance
class GuardianDetailSerializer(serializers.ModelSerializer):
"""junior serializer"""
email = serializers.SerializerMethodField('get_auth')
first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name')
def get_auth(self, obj):
"""user email address"""
return obj.user.username
def get_first_name(self, obj):
"""user first name"""
return obj.user.first_name
def get_last_name(self, obj):
"""user last name"""
return obj.user.last_name
class Meta(object):
"""Meta info"""
model = Guardian
fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob',
'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image',
'updated_at']
class TaskDetailsSerializer(serializers.ModelSerializer):
guardian = GuardianDetailSerializer()
junior = JuniorDetailSerializer()
class Meta(object):
model = JuniorTask
fields = ['id', 'guardian', 'task_name', 'task_description', 'points', 'due_date', 'image','junior',
'task_status', 'is_active']

View File

@ -1,7 +1,7 @@
""" Urls files""" """ Urls files"""
"""Django import""" """Django import"""
from django.urls import path, include from django.urls import path, include
from .views import SignupViewset, UpdateGuardianProfile from .views import SignupViewset, UpdateGuardianProfile, TaskListAPIView, CreateTaskAPIView
"""Third party import""" """Third party import"""
from rest_framework import routers from rest_framework import routers
@ -13,6 +13,10 @@ router = routers.SimpleRouter()
router.register('sign-up', SignupViewset, basename='sign-up') router.register('sign-up', SignupViewset, basename='sign-up')
"""Create guardian profile API""" """Create guardian profile API"""
router.register('create-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile') router.register('create-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile')
"""Create Task API"""
router.register('create-task', CreateTaskAPIView, basename='create-task')
"""Task list API"""
router.register('task-list', TaskListAPIView, basename='task-list')
"""Define Url pattern""" """Define Url pattern"""
urlpatterns = [ urlpatterns = [
path('api/v1/', include(router.urls)), path('api/v1/', include(router.urls)),

View File

@ -3,8 +3,8 @@
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets, status from rest_framework import viewsets, status
"""Import Django app""" """Import Django app"""
from .serializers import UserSerializer, CreateGuardianSerializer from .serializers import UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer
from .models import Guardian from .models import Guardian, JuniorTask
from junior.models import Junior from junior.models import Junior
from account.models import UserEmailOtp from account.models import UserEmailOtp
from .tasks import generate_otp from .tasks import generate_otp
@ -18,17 +18,20 @@ class SignupViewset(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
"""Create user profile""" """Create user profile"""
serializer = UserSerializer(context=request.data['user_type'], data=request.data) if request.data['user_type'] in ['1', '2']:
if serializer.is_valid(): serializer = UserSerializer(context=request.data['user_type'], data=request.data)
serializer.save() if serializer.is_valid():
"""Generate otp""" serializer.save()
otp = generate_otp() """Generate otp"""
UserEmailOtp.objects.create(email=request.data['email'], otp=otp, user_type=str(request.data['user_type'])) otp = generate_otp()
"""Send email to the register user""" UserEmailOtp.objects.create(email=request.data['email'], otp=otp, user_type=str(request.data['user_type']))
send_otp_email(request.data['email'], otp) """Send email to the register user"""
return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp}, send_otp_email(request.data['email'], otp)
response_status=status.HTTP_200_OK) return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp},
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) response_status=status.HTTP_200_OK)
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
else:
return custom_error_response(ERROR_CODE['2028'], response_status=status.HTTP_400_BAD_REQUEST)
class UpdateGuardianProfile(viewsets.ViewSet): class UpdateGuardianProfile(viewsets.ViewSet):
"""Update guardian profile""" """Update guardian profile"""
@ -46,3 +49,30 @@ class UpdateGuardianProfile(viewsets.ViewSet):
serializer.save() serializer.save()
return custom_response(None, serializer.data,response_status=status.HTTP_200_OK) return custom_response(None, serializer.data,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 TaskListAPIView(viewsets.ModelViewSet):
"""Update guardian profile"""
serializer_class = TaskDetailsSerializer
permission_classes = [IsAuthenticated]
def list(self, request, *args, **kwargs):
"""Create guardian profile"""
queryset = JuniorTask.objects.filter(guardian__user=request.user)
print("queryset==>",queryset)
serializer = TaskDetailsSerializer(queryset, many=True)
print("serializer.data===>",serializer.data)
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
class CreateTaskAPIView(viewsets.ModelViewSet):
"""create task for junior"""
serializer_class = TaskSerializer
def create(self, request, *args, **kwargs):
print("request.data===>",request.data)
image = request.data['image']
serializer = TaskSerializer(context={"user":request.user, "image":image}, data=request.data)
if serializer.is_valid():
serializer.save()
return custom_response(SUCCESS_CODE['3018'], serializer.data, response_status=status.HTTP_200_OK)
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)

View File

@ -59,6 +59,11 @@ class CreateJuniorSerializer(serializers.ModelSerializer):
def create(self, validated_data): def create(self, validated_data):
"""Create junior profile""" """Create junior profile"""
image = validated_data.get('image', None) image = validated_data.get('image', None)
guardian_code = validated_data.get('guardian_code',None)
print("guardian_code===>",guardian_code,'==>',type(guardian_code))
# phone_number = validated_data.get('phone', None) # phone_number = validated_data.get('phone', None)
# guardian_data = Guardian.objects.filter(phone=phone_number) # guardian_data = Guardian.objects.filter(phone=phone_number)
# junior_data = Junior.objects.filter(phone=phone_number) # junior_data = Junior.objects.filter(phone=phone_number)
@ -82,6 +87,9 @@ class CreateJuniorSerializer(serializers.ModelSerializer):
junior.gender = validated_data.get('gender',junior.gender) junior.gender = validated_data.get('gender',junior.gender)
"""Update guardian code""" """Update guardian code"""
junior.guardian_code = validated_data.get('guardian_code', junior.guardian_code) junior.guardian_code = validated_data.get('guardian_code', junior.guardian_code)
"""condition for guardian code"""
if guardian_code:
junior.guardian_code = guardian_code
junior.dob = validated_data.get('dob',junior.dob) junior.dob = validated_data.get('dob',junior.dob)
junior.passcode = validated_data.get('passcode', junior.passcode) junior.passcode = validated_data.get('passcode', junior.passcode)
junior.country_name = validated_data.get('country_name', junior.country_name) junior.country_name = validated_data.get('country_name', junior.country_name)
@ -107,3 +115,53 @@ class CreateJuniorSerializer(serializers.ModelSerializer):
with transaction.atomic(): with transaction.atomic():
instance = super().save(**kwargs) instance = super().save(**kwargs)
return instance return instance
class JuniorDetailSerializer(serializers.ModelSerializer):
"""junior serializer"""
email = serializers.SerializerMethodField('get_auth')
first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name')
def get_auth(self, obj):
"""user email address"""
return obj.auth.username
def get_first_name(self, obj):
"""user first name"""
return obj.auth.first_name
def get_last_name(self, obj):
"""user last name"""
return obj.auth.last_name
class Meta(object):
"""Meta info"""
model = Junior
fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob',
'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image',
'updated_at']
class JuniorDetailListSerializer(serializers.ModelSerializer):
"""junior serializer"""
email = serializers.SerializerMethodField('get_auth')
first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name')
def get_auth(self, obj):
return obj.auth.username
def get_first_name(self, obj):
return obj.auth.first_name
def get_last_name(self, obj):
return obj.auth.last_name
class Meta(object):
"""Meta info"""
model = Junior
fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob',
'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image',
'updated_at']

View File

@ -1,7 +1,7 @@
""" Urls files""" """ Urls files"""
"""Django import""" """Django import"""
from django.urls import path, include from django.urls import path, include
from .views import UpdateJuniorProfile, ValidateGuardianCode from .views import UpdateJuniorProfile, ValidateGuardianCode, JuniorListAPIView
"""Third party import""" """Third party import"""
from rest_framework import routers from rest_framework import routers
@ -13,6 +13,8 @@ router = routers.SimpleRouter()
router.register('create-junior-profile', UpdateJuniorProfile, basename='profile-update') router.register('create-junior-profile', UpdateJuniorProfile, basename='profile-update')
"""validate guardian code API""" """validate guardian code API"""
router.register('validate-guardian-code', ValidateGuardianCode, basename='validate-guardian-code') router.register('validate-guardian-code', ValidateGuardianCode, basename='validate-guardian-code')
"""junior list API"""
router.register('junior-list', JuniorListAPIView, basename='junior-list')
"""Define url pattern""" """Define url pattern"""
urlpatterns = [ urlpatterns = [
path('api/v1/', include(router.urls)), path('api/v1/', include(router.urls)),

View File

@ -3,7 +3,7 @@ from rest_framework import viewsets, status
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
"""Django app import""" """Django app import"""
from junior.models import Junior from junior.models import Junior
from .serializers import CreateJuniorSerializer from .serializers import CreateJuniorSerializer, JuniorDetailListSerializer
from guardian.models import Guardian from guardian.models import Guardian
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
from account.utils import custom_response, custom_error_response from account.utils import custom_response, custom_error_response
@ -38,3 +38,16 @@ class ValidateGuardianCode(viewsets.ViewSet):
return custom_response(SUCCESS_CODE['3013'], response_status=status.HTTP_200_OK) return custom_response(SUCCESS_CODE['3013'], response_status=status.HTTP_200_OK)
else: else:
return custom_error_response(ERROR_CODE["2022"], response_status=status.HTTP_400_BAD_REQUEST) return custom_error_response(ERROR_CODE["2022"], response_status=status.HTTP_400_BAD_REQUEST)
class JuniorListAPIView(viewsets.ModelViewSet):
"""Junior list of assosicated guardian"""
serializer_class = JuniorDetailListSerializer
def list(self, request, *args, **kwargs):
""" junior list"""
guardian_data = Guardian.objects.filter(user__email=request.user).last()
queryset = Junior.objects.filter(guardian_code__icontains=str(guardian_data.guardian_code))
print("queryset===>",queryset)
serializer = JuniorDetailListSerializer(queryset, many=True)
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)

View File

@ -201,3 +201,4 @@ ALIYUN_OSS_REGION = os.getenv('ALIYUN_OSS_REGION')
STATIC_URL = 'static/' STATIC_URL = 'static/'
STATIC_ROOT = 'static' STATIC_ROOT = 'static'