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):