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]