From 777030466501da57767062d22ac22b4408111869 Mon Sep 17 00:00:00 2001 From: Krrish Sehgal <133865424+krrish-sehgal@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:46:00 +0530 Subject: [PATCH 1/4] shifted to api --- blt/urls.py | 4 +- ...ecture_content_alter_lecture_instructor.py | 26 ++++++++++ website/templates/team_overview.html | 4 ++ website/views/teams.py | 52 +++++++++++++------ 4 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py diff --git a/blt/urls.py b/blt/urls.py index a88051c245..0beac7f80d 100644 --- a/blt/urls.py +++ b/blt/urls.py @@ -280,10 +280,10 @@ TeamChallenges, TeamLeaderboard, TeamOverview, + GiveKudosView, add_member, create_team, delete_team, - give_kudos, join_requests, kick_member, leave_team, @@ -996,7 +996,7 @@ path("teams/delete-team/", delete_team, name="delete_team"), path("teams/leave-team/", leave_team, name="leave_team"), path("teams/kick-member/", kick_member, name="kick_member"), - path("teams/give-kudos/", give_kudos, name="give_kudos"), + path("teams/give-kudos/", GiveKudosView.as_view(), name="give_kudos"), path( "similarity_scan/", TemplateView.as_view(template_name="similarity_scan.html"), diff --git a/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py b/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py new file mode 100644 index 0000000000..fd5a9de23c --- /dev/null +++ b/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py @@ -0,0 +1,26 @@ +# Generated by Django 5.1.7 on 2025-03-29 11:27 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("website", "0234_githubissue_linked_pull_requests"), + ] + + operations = [ + migrations.AlterField( + model_name="lecture", + name="content", + field=models.TextField(blank=True, null=True), + ), + migrations.AlterField( + model_name="lecture", + name="instructor", + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="website.userprofile" + ), + ), + ] diff --git a/website/templates/team_overview.html b/website/templates/team_overview.html index 1269b366e3..114167564f 100644 --- a/website/templates/team_overview.html +++ b/website/templates/team_overview.html @@ -671,6 +671,9 @@

Send Kudos

const receiver = document.getElementById('kudosReceiver').value; const linkUrl = document.getElementById('kudosLink').value.trim(); const commentText = document.getElementById('kudosComment').value.trim(); + const userUsername = "{{ request.user.username|default:'' }}"; + const sender = userUsername || "{{ user.username }}"; + console.log(sender) fetch("/teams/give-kudos/", { method: "POST", headers: { @@ -679,6 +682,7 @@

Send Kudos

}, body: JSON.stringify({ kudosReceiver: receiver, + kudosSender: sender, link: linkUrl, comment: commentText }) diff --git a/website/views/teams.py b/website/views/teams.py index 21214e1206..026bffd524 100644 --- a/website/views/teams.py +++ b/website/views/teams.py @@ -8,7 +8,13 @@ from django.db.models import Count from django.http import JsonResponse from django.shortcuts import redirect, render +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.permissions import IsAuthenticated +from django.contrib.auth.models import User +from django.http import JsonResponse +import json # Create your views here. from django.views.generic import TemplateView @@ -220,31 +226,45 @@ def kick_member(request): return JsonResponse({"success": False, "error": "Invalid JSON data"}) return JsonResponse({"success": False, "error": "Invalid request method"}) - -@login_required -def give_kudos(request): - if request.method == "POST": +class GiveKudosView(APIView): + def post(self, request): try: - data = json.loads(request.body) + data = request.data # DRF automatically parses JSON request data receiver_username = data.get("kudosReceiver") link_url = data.get("link") comment_text = data.get("comment", "") - except json.JSONDecodeError: - return JsonResponse({"success": False, "error": "Invalid request data"}) + sender_username = None + sender = None - if receiver_username: - try: - receiver = User.objects.get(username=receiver_username) - Kudos.objects.create(sender=request.user, receiver=receiver, link=link_url, comment=comment_text) - return JsonResponse({"success": True, "message": "Kudos sent successfully!"}) - except User.DoesNotExist: - return JsonResponse({"success": False, "error": "User does not exist"}) + # Check if the user is authenticated + if request.user.is_authenticated: + print("User is authenticated") + sender = request.user # Use logged-in user as sender + else: + print("User is not authenticated") + sender_username = data.get("kudosSender") # Get sender from request data - return JsonResponse({"success": False, "error": "Missing receiver or message"}) + if not receiver_username: + return Response({"success": False, "error": "Missing receiver"}, status=400) + if not sender and not sender_username: + return Response({"success": False, "error": "Missing sender"}, status=400) - return JsonResponse({"success": False, "error": "Invalid request method"}) + # Fetch the receiver + receiver = User.objects.get(username=receiver_username) + # Fetch sender if it's coming from the request body + if sender_username: + sender = User.objects.get(username=sender_username) # Get sender from DB + + # Create and store the Kudos + Kudos.objects.create(sender=sender, receiver=receiver, link=link_url, comment=comment_text) + return Response({"success": True, "message": "Kudos sent successfully!"}, status=201) + + except User.DoesNotExist: + return Response({"success": False, "error": "User does not exist"}, status=404) + except Exception as e: + return Response({"success": False, "error": str(e)}, status=400) class TeamChallenges(TemplateView): """View for displaying all team challenges and their progress.""" From ab4522a2563c1776f7a66269c25c0d6a2b254af1 Mon Sep 17 00:00:00 2001 From: Krrish Sehgal <133865424+krrish-sehgal@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:43:14 +0530 Subject: [PATCH 2/4] pre commit changes --- blt/urls.py | 2 +- website/views/teams.py | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/blt/urls.py b/blt/urls.py index 0beac7f80d..0f2d9bacfd 100644 --- a/blt/urls.py +++ b/blt/urls.py @@ -277,10 +277,10 @@ from website.views.slack_handlers import slack_commands, slack_events from website.views.social import queue_social_view from website.views.teams import ( + GiveKudosView, TeamChallenges, TeamLeaderboard, TeamOverview, - GiveKudosView, add_member, create_team, delete_team, diff --git a/website/views/teams.py b/website/views/teams.py index 026bffd524..64a6f85b2a 100644 --- a/website/views/teams.py +++ b/website/views/teams.py @@ -8,15 +8,11 @@ from django.db.models import Count from django.http import JsonResponse from django.shortcuts import redirect, render -from rest_framework.views import APIView -from rest_framework.response import Response -from rest_framework.permissions import IsAuthenticated -from django.contrib.auth.models import User -from django.http import JsonResponse -import json # Create your views here. from django.views.generic import TemplateView +from rest_framework.response import Response +from rest_framework.views import APIView from website.models import Challenge, JoinRequest, Kudos, Organization @@ -226,6 +222,7 @@ def kick_member(request): return JsonResponse({"success": False, "error": "Invalid JSON data"}) return JsonResponse({"success": False, "error": "Invalid request method"}) + class GiveKudosView(APIView): def post(self, request): try: @@ -235,13 +232,10 @@ def post(self, request): comment_text = data.get("comment", "") sender_username = None sender = None - # Check if the user is authenticated if request.user.is_authenticated: - print("User is authenticated") sender = request.user # Use logged-in user as sender else: - print("User is not authenticated") sender_username = data.get("kudosSender") # Get sender from request data if not receiver_username: @@ -255,7 +249,7 @@ def post(self, request): # Fetch sender if it's coming from the request body if sender_username: sender = User.objects.get(username=sender_username) # Get sender from DB - + # Create and store the Kudos Kudos.objects.create(sender=sender, receiver=receiver, link=link_url, comment=comment_text) @@ -264,7 +258,9 @@ def post(self, request): except User.DoesNotExist: return Response({"success": False, "error": "User does not exist"}, status=404) except Exception as e: - return Response({"success": False, "error": str(e)}, status=400) + return Response({"success": False, "error": "Check the BLT usernames"}, status=400) + + class TeamChallenges(TemplateView): """View for displaying all team challenges and their progress.""" From a1207eff5c74787394800dc63e83bbb429368a06 Mon Sep 17 00:00:00 2001 From: Krrish Sehgal <133865424+krrish-sehgal@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:50:27 +0530 Subject: [PATCH 3/4] pre-commit migration' --- .../0235_alter_lecture_content_alter_lecture_instructor.py | 1 - 1 file changed, 1 deletion(-) diff --git a/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py b/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py index fd5a9de23c..51ff392794 100644 --- a/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py +++ b/website/migrations/0235_alter_lecture_content_alter_lecture_instructor.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("website", "0234_githubissue_linked_pull_requests"), ] From 029a40264b49b189ebdcb1abc5f35bbd036daa61 Mon Sep 17 00:00:00 2001 From: Krrish Sehgal <133865424+krrish-sehgal@users.noreply.github.com> Date: Thu, 3 Apr 2025 09:22:22 +0530 Subject: [PATCH 4/4] made rabbit changes --- website/views/teams.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/website/views/teams.py b/website/views/teams.py index 64a6f85b2a..e7d337b13e 100644 --- a/website/views/teams.py +++ b/website/views/teams.py @@ -224,41 +224,36 @@ def kick_member(request): class GiveKudosView(APIView): + authentication_classes = [] # No authentication required + permission_classes = [] # No permissions required + def post(self, request): try: data = request.data # DRF automatically parses JSON request data receiver_username = data.get("kudosReceiver") + sender_username = data.get("kudosSender") # Sender comes from request data link_url = data.get("link") comment_text = data.get("comment", "") - sender_username = None - sender = None - # Check if the user is authenticated - if request.user.is_authenticated: - sender = request.user # Use logged-in user as sender - else: - sender_username = data.get("kudosSender") # Get sender from request data if not receiver_username: return Response({"success": False, "error": "Missing receiver"}, status=400) - if not sender and not sender_username: + if not sender_username: return Response({"success": False, "error": "Missing sender"}, status=400) - # Fetch the receiver - receiver = User.objects.get(username=receiver_username) + # Fetch sender and receiver + receiver = User.objects.filter(username=receiver_username).first() + sender = User.objects.filter(username=sender_username).first() - # Fetch sender if it's coming from the request body - if sender_username: - sender = User.objects.get(username=sender_username) # Get sender from DB + if not receiver or not sender: + return Response({"success": False, "error": "Invalid sender or receiver username"}, status=404) # Create and store the Kudos Kudos.objects.create(sender=sender, receiver=receiver, link=link_url, comment=comment_text) return Response({"success": True, "message": "Kudos sent successfully!"}, status=201) - except User.DoesNotExist: - return Response({"success": False, "error": "User does not exist"}, status=404) except Exception as e: - return Response({"success": False, "error": "Check the BLT usernames"}, status=400) + return Response({"success": False, "error": "Unexpected error,Check The BLT usernames "}, status=400) class TeamChallenges(TemplateView):