From 60d7d88681355b4ff634c415d4468611770f7c62 Mon Sep 17 00:00:00 2001 From: ParthipPR <parthip2512003@gmail.com> Date: Thu, 1 Aug 2024 19:15:55 +0530 Subject: [PATCH 1/5] "Feat: Added feature for checking and updating user term approval status" --- api/dashboard/profile/profile_serializer.py | 21 ++++++++++------ api/dashboard/profile/profile_view.py | 28 +++++++++++++++++++++ api/dashboard/profile/urls.py | 1 + db/user.py | 4 +-- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/api/dashboard/profile/profile_serializer.py b/api/dashboard/profile/profile_serializer.py index 7fdd0d55..1cd52924 100644 --- a/api/dashboard/profile/profile_serializer.py +++ b/api/dashboard/profile/profile_serializer.py @@ -47,6 +47,7 @@ class UserProfileSerializer(serializers.ModelSerializer): interest_groups = serializers.SerializerMethodField() org_district_id = serializers.SerializerMethodField() percentile = serializers.SerializerMethodField() + is_userterms_approved = serializers.SerializerMethodField() class Meta: model = User @@ -68,8 +69,14 @@ class Meta: "interest_groups", "is_public", "percentile", + "is_userterms_approved", ) + def get_userterm(self, instance, validated_data): + instance.is_userterms_approved = validated_data.get('is_userterms_approved', instance.is_userterms_approved) + instance.save() + return instance + def get_percentile(self, obj): users_count_lt_user_karma = Wallet.objects.filter( karma__lt=obj.wallet_user.karma @@ -177,7 +184,7 @@ def get_tasks(self, obj): user_igs = UserIgLink.objects.filter( user__id=user_id).values_list("ig__name", flat=True) tasks = TaskList.objects.filter(level=obj) - + if obj.level_order > 4: tasks = tasks.filter(ig__name__in=user_igs) @@ -271,8 +278,8 @@ def update(self, instance, validated_data): class UserProfileEditSerializer(serializers.ModelSerializer): communities = serializers.ListField(write_only=True) - - + + def to_representation(self, instance): data = super().to_representation(instance) communities = instance.user_organization_link_user.filter( @@ -312,7 +319,7 @@ def update(self, instance, validated_data): UserOrganizationLink.objects.bulk_create( user_organization_links) - + return super().update(instance, validated_data) @@ -326,9 +333,9 @@ class Meta: "gender", "dob", "district", - + ] - + class UserIgListSerializer(serializers.ModelSerializer): @@ -409,7 +416,7 @@ def create_karma_activity_log(task_hashtag, karma_value): WebHookActions.UPDATE.value, value ) - + else: KarmaActivityLog.objects.filter( task_id=task.id, user_id=user_id diff --git a/api/dashboard/profile/profile_view.py b/api/dashboard/profile/profile_view.py index db20a97a..110adb51 100644 --- a/api/dashboard/profile/profile_view.py +++ b/api/dashboard/profile/profile_view.py @@ -436,3 +436,31 @@ def get(self, request, muid): return CustomResponse( response="The given muid seems to be invalid" ).get_failure_response() + +class UsertermAPI(APIView): + def post(self, request,muid): + user = User.objects.get(muid=muid) + try: + profile = UserProfile.objects.get(user=user) + except UserProfile.DoesNotExist: + return CustomResponse(response="The user profile doesn't exists").get_failure_response() + + serializer = UserProfileSerializer(profile, data={"is_userterms_approved": True}, partial=True) + if serializer.is_valid(): + profile = serializer.save() + if profile.is_userterms_approved: + return CustomResponse(response=response_data).get_success_response() + else: + return CustomResponse(response="The given muid seems to be invalid").get_failure_response() + return CustomResponse(response=response_data).get_failure_response() + + def get(self,request,muid): + user = User.objects.get(muid=muid) + try: + profile = UserProfile.objects.get(user=user) + except UserProfile.DoesNotExist: + return CustomResponse(response="The user profile doesn't exists").get_failure_response() + if profile.is_userterms_approved: + return CustomResponse(response=response_data).get_success_response() + else: + return CustomResponse(response=response_data).get_failure_response() diff --git a/api/dashboard/profile/urls.py b/api/dashboard/profile/urls.py index 2a6da3b2..5552aac6 100644 --- a/api/dashboard/profile/urls.py +++ b/api/dashboard/profile/urls.py @@ -21,4 +21,5 @@ path('socials/<str:muid>/', profile_view.GetSocialsAPI.as_view()), path('qrcode-get/<str:uuid>/', profile_view.QrcodeRetrieveAPI.as_view()), path('change-password/', profile_view.ResetPasswordAPI.as_view()), + path('userterm-approved/,<str:muid>/',profile_view.UsertermAPI.as_view()) ] diff --git a/db/user.py b/db/user.py index 3177c558..5977e0f3 100644 --- a/db/user.py +++ b/db/user.py @@ -25,6 +25,7 @@ class User(models.Model): dob = models.DateField(blank=True, null=True) admin = models.BooleanField(default=False) exist_in_guild = models.BooleanField(default=False) + is_userterms_approved = models.BooleanField(default=False) district = models.ForeignKey("District", on_delete=models.CASCADE, blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) suspended_at = models.DateTimeField(blank=True, null=True) @@ -221,6 +222,3 @@ class Meta: managed = False db_table = 'user_coupon_link' - - - From 9e80984eaa4ea8198a9f63f7d9accc98126cdd27 Mon Sep 17 00:00:00 2001 From: dilshadmohammed <dilshadmohammed13@gmail.com> Date: Fri, 2 Aug 2024 07:59:19 +0530 Subject: [PATCH 2/5] update: change in searchfields for launchpad leaderboard --- api/launchpad/launchpad_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/launchpad/launchpad_views.py b/api/launchpad/launchpad_views.py index 3827fc07..5d2557fe 100644 --- a/api/launchpad/launchpad_views.py +++ b/api/launchpad/launchpad_views.py @@ -144,7 +144,7 @@ def get(self, request): paginated_queryset = CommonUtils.get_paginated_queryset( users, request, - ["full_name", "karma", "org", "district_name", "state"] + ["muid","full_name","org"] ) final_users = paginated_queryset.get("queryset") From ee40b05d2b3cbc15aa3c7ce3cee06a4dc17f667f Mon Sep 17 00:00:00 2001 From: ParthipPR <parthip2512003@gmail.com> Date: Sat, 3 Aug 2024 11:45:16 +0530 Subject: [PATCH 3/5] "Fix: Changing is_userterms_approved field from user profile to user settings" --- api/dashboard/profile/profile_serializer.py | 21 +++++++++++++++------ api/dashboard/profile/profile_view.py | 20 ++++++++++---------- db/user.py | 2 +- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/api/dashboard/profile/profile_serializer.py b/api/dashboard/profile/profile_serializer.py index 1cd52924..1379451f 100644 --- a/api/dashboard/profile/profile_serializer.py +++ b/api/dashboard/profile/profile_serializer.py @@ -47,7 +47,6 @@ class UserProfileSerializer(serializers.ModelSerializer): interest_groups = serializers.SerializerMethodField() org_district_id = serializers.SerializerMethodField() percentile = serializers.SerializerMethodField() - is_userterms_approved = serializers.SerializerMethodField() class Meta: model = User @@ -69,13 +68,8 @@ class Meta: "interest_groups", "is_public", "percentile", - "is_userterms_approved", ) - def get_userterm(self, instance, validated_data): - instance.is_userterms_approved = validated_data.get('is_userterms_approved', instance.is_userterms_approved) - instance.save() - return instance def get_percentile(self, obj): users_count_lt_user_karma = Wallet.objects.filter( @@ -438,3 +432,18 @@ def create_karma_activity_log(task_hashtag, karma_value): create_karma_activity_log(f"#social_{account}", -20) return super().update(instance, validated_data) + +class UserTermSerializer(serializers.ModelSerializer): + is_userterms_approved = serializers.SerializerMethodField() + + + class Meta: + model = user_settings + fields =[ + "is_userterms_approved", + "user", + ] + def get_userterm(self, instance, validated_data): + instance.is_userterms_approved = validated_data.get('is_userterms_approved', instance.is_userterms_approved) + instance.save() + return instance diff --git a/api/dashboard/profile/profile_view.py b/api/dashboard/profile/profile_view.py index 110adb51..5548858c 100644 --- a/api/dashboard/profile/profile_view.py +++ b/api/dashboard/profile/profile_view.py @@ -441,14 +441,14 @@ class UsertermAPI(APIView): def post(self, request,muid): user = User.objects.get(muid=muid) try: - profile = UserProfile.objects.get(user=user) - except UserProfile.DoesNotExist: - return CustomResponse(response="The user profile doesn't exists").get_failure_response() + settings = UserSettings.objects.get(user=user) + except UserSettings.DoesNotExist: + return CustomResponse(response="The user setting doesn't exists").get_failure_response() - serializer = UserProfileSerializer(profile, data={"is_userterms_approved": True}, partial=True) + serializer = UserTermSerializer(settings, data={"is_userterms_approved": True}, partial=True) if serializer.is_valid(): - profile = serializer.save() - if profile.is_userterms_approved: + settings = serializer.save() + if settings.is_userterms_approved: return CustomResponse(response=response_data).get_success_response() else: return CustomResponse(response="The given muid seems to be invalid").get_failure_response() @@ -457,10 +457,10 @@ def post(self, request,muid): def get(self,request,muid): user = User.objects.get(muid=muid) try: - profile = UserProfile.objects.get(user=user) - except UserProfile.DoesNotExist: - return CustomResponse(response="The user profile doesn't exists").get_failure_response() - if profile.is_userterms_approved: + settings = UserSettings.objects.get(user=user) + except UserSettings.DoesNotExist: + return CustomResponse(response="The user settings doesn't exists").get_failure_response() + if settings.is_userterms_approved: return CustomResponse(response=response_data).get_success_response() else: return CustomResponse(response=response_data).get_failure_response() diff --git a/db/user.py b/db/user.py index 5977e0f3..e40e633c 100644 --- a/db/user.py +++ b/db/user.py @@ -25,7 +25,6 @@ class User(models.Model): dob = models.DateField(blank=True, null=True) admin = models.BooleanField(default=False) exist_in_guild = models.BooleanField(default=False) - is_userterms_approved = models.BooleanField(default=False) district = models.ForeignKey("District", on_delete=models.CASCADE, blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) suspended_at = models.DateTimeField(blank=True, null=True) @@ -165,6 +164,7 @@ class UserSettings(models.Model): id = models.CharField(primary_key=True, max_length=36, default=uuid.uuid4) user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user_settings_user") is_public = models.BooleanField(default=False) + is_userterms_approved = models.BooleanField(default=False) updated_by = models.ForeignKey(User, on_delete=models.SET(settings.SYSTEM_ADMIN_ID), db_column='updated_by', related_name='user_settings_updated_by') updated_at = models.DateTimeField(auto_now=True) From 4d89815aae0c2ab1491368273094cd9c155090ff Mon Sep 17 00:00:00 2001 From: ParthipPR <parthip2512003@gmail.com> Date: Wed, 7 Aug 2024 19:45:23 +0530 Subject: [PATCH 4/5] "Fix: fixed errors in profile_serializer and profile_view" --- api/dashboard/profile/profile_serializer.py | 2 +- api/dashboard/profile/profile_view.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/api/dashboard/profile/profile_serializer.py b/api/dashboard/profile/profile_serializer.py index 1379451f..3839a3a8 100644 --- a/api/dashboard/profile/profile_serializer.py +++ b/api/dashboard/profile/profile_serializer.py @@ -438,7 +438,7 @@ class UserTermSerializer(serializers.ModelSerializer): class Meta: - model = user_settings + model = UserSettings fields =[ "is_userterms_approved", "user", diff --git a/api/dashboard/profile/profile_view.py b/api/dashboard/profile/profile_view.py index 5548858c..555789d5 100644 --- a/api/dashboard/profile/profile_view.py +++ b/api/dashboard/profile/profile_view.py @@ -454,13 +454,13 @@ def post(self, request,muid): return CustomResponse(response="The given muid seems to be invalid").get_failure_response() return CustomResponse(response=response_data).get_failure_response() - def get(self,request,muid): - user = User.objects.get(muid=muid) - try: - settings = UserSettings.objects.get(user=user) - except UserSettings.DoesNotExist: - return CustomResponse(response="The user settings doesn't exists").get_failure_response() - if settings.is_userterms_approved: - return CustomResponse(response=response_data).get_success_response() - else: - return CustomResponse(response=response_data).get_failure_response() + def get(self,request,muid): + user = User.objects.get(muid=muid) + try: + settings = UserSettings.objects.get(user=user) + except UserSettings.DoesNotExist: + return CustomResponse(response="The user settings doesn't exists").get_failure_response() + if settings.is_userterms_approved: + return CustomResponse(response=response_data).get_success_response() + else: + return CustomResponse(response=response_data).get_failure_response() From 7b61c31590fc4fcf9b39e0b6d9cc4ab4c398066c Mon Sep 17 00:00:00 2001 From: jelanmathewjames <72068016+jelanmathewjames@users.noreply.github.com> Date: Sat, 10 Aug 2024 19:19:17 +0530 Subject: [PATCH 5/5] Update types.py --- utils/types.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/types.py b/utils/types.py index d4431952..5eafabde 100644 --- a/utils/types.py +++ b/utils/types.py @@ -156,7 +156,8 @@ def get_all_values(cls): class TFPTasksHashtags(Enum): SCRATCH = '#tfp2.0-scratch' COMMAND_LINE = '#tfp2.0-command-line' - + GIT_GITHUB = '#tfp2.0-git-github' + @classmethod def get_all_values(cls): return [member.value for member in cls]