Skip to content

Commit 63201d6

Browse files
authored
Merge pull request #2402 from gtech-mulearn/dev
Dev Server
2 parents f6c26c3 + 89a9cc0 commit 63201d6

File tree

2 files changed

+121
-96
lines changed

2 files changed

+121
-96
lines changed

api/dashboard/achievement/achievement_views.py

Lines changed: 117 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,48 @@
99
import uuid
1010
from django.utils.timezone import now
1111
from django.core.exceptions import ObjectDoesNotExist, ValidationError
12+
13+
1214
class AchievementListAPIView(APIView):
1315
def get(self, request):
1416
user_id = JWTUtils.fetch_user_id(request)
1517

1618
if not user_id:
17-
return CustomResponse(general_message="Invalid or missing token").get_failure_response()
19+
return CustomResponse(
20+
general_message="Invalid or missing token"
21+
).get_failure_response()
1822

1923
user = User.objects.filter(id=user_id).first()
2024

2125
if not user:
22-
return CustomResponse(general_message="User Not Exists").get_failure_response()
26+
return CustomResponse(
27+
general_message="User Not Exists"
28+
).get_failure_response()
2329

2430
achievements = Achievement.objects.all()
25-
achievements_serializer = achievement_serializer.AchievementSerializer(achievements, many=True)
31+
achievements_serializer = achievement_serializer.AchievementSerializer(
32+
achievements, many=True
33+
)
34+
35+
return CustomResponse(
36+
response=achievements_serializer.data
37+
).get_success_response()
2638

27-
return CustomResponse(response=achievements_serializer.data).get_success_response()
2839

2940
class AchievementCreateAPIView(APIView):
3041
def post(self, request):
3142
user_id = JWTUtils.fetch_user_id(request)
3243

3344
if not user_id:
34-
return CustomResponse(general_message="Invalid or missing token").get_failure_response()
45+
return CustomResponse(
46+
general_message="Invalid or missing token"
47+
).get_failure_response()
3548

3649
user = User.objects.filter(id=user_id).first()
3750
if not user:
38-
return CustomResponse(general_message="User Not Exists").get_failure_response()
51+
return CustomResponse(
52+
general_message="User Not Exists"
53+
).get_failure_response()
3954

4055
data = request.data
4156
required_fields = ["name", "description", "icon", "tags", "type", "has_vc"]
@@ -47,14 +62,18 @@ def post(self, request):
4762
).get_failure_response()
4863

4964
if Achievement.objects.filter(name=data["name"]).exists():
50-
return CustomResponse(general_message="Name already exists").get_failure_response()
65+
return CustomResponse(
66+
general_message="Name already exists"
67+
).get_failure_response()
5168

5269
level = None
5370
if "level_id" in data and data["level_id"]:
5471
try:
5572
level = Level.objects.get(id=data["level_id"])
5673
except Level.DoesNotExist:
57-
return CustomResponse(general_message="Invalid level_id").get_failure_response()
74+
return CustomResponse(
75+
general_message="Invalid level_id"
76+
).get_failure_response()
5877

5978
achievement = Achievement.objects.create(
6079
id=str(uuid.uuid4()),
@@ -73,27 +92,36 @@ def post(self, request):
7392
)
7493

7594
return CustomResponse(
76-
general_message=f"Achievement '{achievement.name}' created successfully!").get_success_response()
95+
general_message=f"Achievement '{achievement.name}' created successfully!"
96+
).get_success_response()
7797

7898

7999
class AchievementUpdateAPIView(APIView):
80100
def put(self, request, achievement_id=None):
81101
user_id = JWTUtils.fetch_user_id(request)
82102

83103
if not user_id:
84-
return CustomResponse(general_message="Invalid or missing token").get_failure_response()
104+
return CustomResponse(
105+
general_message="Invalid or missing token"
106+
).get_failure_response()
85107

86108
user = User.objects.filter(id=user_id).first()
87109
if not user:
88-
return CustomResponse(general_message="User Not Exists").get_failure_response()
110+
return CustomResponse(
111+
general_message="User Not Exists"
112+
).get_failure_response()
89113

90114
if not achievement_id:
91-
return CustomResponse(general_message="Achievement ID is required").get_failure_response()
115+
return CustomResponse(
116+
general_message="Achievement ID is required"
117+
).get_failure_response()
92118

93119
try:
94120
achievement = Achievement.objects.get(id=achievement_id)
95121
except Achievement.DoesNotExist:
96-
return CustomResponse(general_message="Achievement not found").get_failure_response()
122+
return CustomResponse(
123+
general_message="Achievement not found"
124+
).get_failure_response()
97125

98126
data = request.data.copy()
99127
data["updated_by"] = user_id
@@ -104,106 +132,139 @@ def put(self, request, achievement_id=None):
104132
level = Level.objects.get(id=data["level_id"])
105133
data["level_id"] = level.id
106134
except Level.DoesNotExist:
107-
return CustomResponse(general_message="Invalid level_id").get_failure_response()
135+
return CustomResponse(
136+
general_message="Invalid level_id"
137+
).get_failure_response()
108138
else:
109139
data["level_id"] = None
110140

111-
serializer = achievement_serializer.AchievementSerializer(achievement, data=data, partial=True)
141+
serializer = achievement_serializer.AchievementSerializer(
142+
achievement, data=data, partial=True
143+
)
112144

113145
if serializer.is_valid():
114146
serializer.save()
115-
return CustomResponse(general_message="Achievement updated successfully").get_success_response()
147+
return CustomResponse(
148+
general_message="Achievement updated successfully"
149+
).get_success_response()
116150

117-
return CustomResponse(general_message="Invalid Data", response=serializer.errors).get_failure_response()
151+
return CustomResponse(
152+
general_message="Invalid Data", response=serializer.errors
153+
).get_failure_response()
118154

119155

120156
class AchievementDeleteAPIView(APIView):
121157
def delete(self, request, achievement_id):
122158
user_id = JWTUtils.fetch_user_id(request)
123159

124160
if not user_id:
125-
return CustomResponse(general_message="Invalid or missing token").get_failure_response()
161+
return CustomResponse(
162+
general_message="Invalid or missing token"
163+
).get_failure_response()
126164

127165
user = User.objects.filter(id=user_id).first()
128166
if not user:
129-
return CustomResponse(general_message="User Not Exists").get_failure_response()
167+
return CustomResponse(
168+
general_message="User Not Exists"
169+
).get_failure_response()
130170

131171
try:
132172
achievement = Achievement.objects.get(id=achievement_id)
133173
except Achievement.DoesNotExist:
134-
return CustomResponse(general_message="Achievement not found").get_failure_response()
174+
return CustomResponse(
175+
general_message="Achievement not found"
176+
).get_failure_response()
135177

136178
achievement.delete()
137-
return CustomResponse(general_message="Achievement deleted successfully").get_success_response()
179+
return CustomResponse(
180+
general_message="Achievement deleted successfully"
181+
).get_success_response()
182+
138183

139184
class UserAchievementsListAPIView(APIView):
140185
def get(self, request, muid):
141186
try:
142187
user = get_object_or_404(User, muid=muid)
143188

144189
user_achievements = (
145-
UserAchievementsLog.objects
146-
.filter(user_id=user.id)
147-
.select_related('achievement_id')
148-
.only('id', 'user_id', 'achievement_id', 'is_issued', 'vc_url', 'achievement_id__name', 'achievement_id__description')
190+
UserAchievementsLog.objects.filter(user_id=user.id)
191+
.select_related("achievement_id")
192+
.only(
193+
"id",
194+
"user_id",
195+
"achievement_id",
196+
"is_issued",
197+
"vc_url",
198+
"achievement_id__name",
199+
"achievement_id__description",
200+
)
149201
)
150202

203+
# if not user_achievements.exists():
204+
# return CustomResponse(
205+
# general_message="No achievements found for this user"
206+
# ).get_failure_response()
151207

152-
if not user_achievements.exists():
153-
return CustomResponse(general_message="No achievements found for this user").get_failure_response()
154-
155-
156-
serializer = achievement_serializer.UserAchievementsSerializer(user_achievements, many=True)
208+
serializer = achievement_serializer.UserAchievementsSerializer(
209+
user_achievements, many=True
210+
)
157211
return CustomResponse(response=serializer.data).get_success_response()
158212

159213
except ValidationError:
160-
return CustomResponse(general_message="Invalid format for muid").get_failure_response()
214+
return CustomResponse(
215+
general_message="Invalid format for muid"
216+
).get_failure_response()
161217

162218
except Exception as e:
163-
return CustomResponse(general_message=f"An unexpected error occurred: {str(e)}").get_failure_response()
219+
return CustomResponse(
220+
general_message=f"An unexpected error occurred: {str(e)}"
221+
).get_failure_response()
164222

165223

166224
class UserAchievementsIssueAPIView(APIView):
167225
def post(self, request):
168226
user_id = JWTUtils.fetch_user_id(request)
169227
if not user_id:
170-
return CustomResponse(general_message="Invalid or missing token").get_failure_response()
228+
return CustomResponse(
229+
general_message="Invalid or missing token"
230+
).get_failure_response()
171231

172232
achievement_id = request.data.get("achievement_id")
173233
vc_url = request.data.get("vc_url")
174234

175235
if not achievement_id:
176-
return CustomResponse(general_message="Achievement ID is required").get_failure_response()
236+
return CustomResponse(
237+
general_message="Achievement ID is required"
238+
).get_failure_response()
177239

178240
if not vc_url:
179-
return CustomResponse(general_message="VC URL is required").get_failure_response()
241+
return CustomResponse(
242+
general_message="VC URL is required"
243+
).get_failure_response()
180244

181245
if not User.objects.filter(id=user_id).exists():
182-
return CustomResponse(general_message="User Not Exists").get_failure_response()
246+
return CustomResponse(
247+
general_message="User Not Exists"
248+
).get_failure_response()
183249

184250
try:
185-
user_achievement = UserAchievementsLog.objects.get(user_id=user_id, achievement_id=achievement_id)
251+
user_achievement = UserAchievementsLog.objects.get(
252+
user_id=user_id, achievement_id=achievement_id
253+
)
186254
except UserAchievementsLog.DoesNotExist:
187-
return CustomResponse(general_message="Achievement record not found").get_failure_response()
255+
return CustomResponse(
256+
general_message="Achievement record not found"
257+
).get_failure_response()
188258

189259
if user_achievement.is_issued:
190-
return CustomResponse(general_message="This achievement has already been issued").get_failure_response()
191-
192-
UserAchievementsLog.objects.filter(user_id=user_id, achievement_id=achievement_id).update(is_issued=True, vc_url=vc_url)
193-
194-
return CustomResponse(general_message="Achievement issued successfully").get_success_response()
195-
196-
197-
198-
199-
200-
201-
202-
203-
204-
205-
206-
207-
260+
return CustomResponse(
261+
general_message="This achievement has already been issued"
262+
).get_failure_response()
208263

264+
UserAchievementsLog.objects.filter(
265+
user_id=user_id, achievement_id=achievement_id
266+
).update(is_issued=True, vc_url=vc_url)
209267

268+
return CustomResponse(
269+
general_message="Achievement issued successfully"
270+
).get_success_response()

api/dashboard/learningcircle/learningcircle_serializer.py

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ class CircleMeetupMinSerializer(serializers.ModelSerializer):
487487
is_ended = serializers.SerializerMethodField()
488488
is_joined = serializers.SerializerMethodField()
489489
is_rsvp = serializers.SerializerMethodField()
490-
attendees = serializers.SerializerMethodField()
490+
attendees_count = serializers.SerializerMethodField()
491491
created_by = serializers.CharField(source="created_by.full_name", read_only=True)
492492
created_by_id = serializers.CharField(source="created_by.id", read_only=True)
493493
ig_id = serializers.CharField(source="circle_id.ig.id", read_only=True)
@@ -517,44 +517,8 @@ def get_is_rsvp(self, obj):
517517
).exists()
518518
return False
519519

520-
def get_attendees(self, obj):
521-
query = (
522-
obj.circle_meeting_attendance_meet_id.select_related("user_id")
523-
.prefetch_related("user_id__user_organization_link_user")
524-
.only(
525-
"user_id__full_name",
526-
"is_joined",
527-
"is_report_submitted",
528-
"user_id__user_organization_link_user__org_id",
529-
)[:3]
530-
)
531-
data = []
532-
user_id = self.context.get("user_id")
533-
cur_user_org = None
534-
if user_id:
535-
try:
536-
cur_user = (
537-
User.objects.prefetch_related("user_organization_link_user")
538-
.only("user_organization_link_user__org_id")
539-
.get(id=user_id)
540-
)
541-
cur_user_org = cur_user.user_organization_link_user__org_id
542-
except:
543-
pass
544-
for attendee in query:
545-
data.append(
546-
{
547-
"full_name": attendee.user_id.full_name,
548-
"is_joined": attendee.is_joined,
549-
"is_report_submitted": attendee.is_report_submitted,
550-
"profile_pic": attendee.user_id.profile_pic,
551-
"is_same_org": cur_user_org
552-
in attendee.user_id.user_organization_link_user.all().values_list(
553-
"org_id", flat=True
554-
),
555-
}
556-
)
557-
return data
520+
def get_attendees_count(self, obj):
521+
return obj.circle_meeting_attendance_meet_id.count()
558522

559523
class Meta:
560524
model = CircleMeetingLog
@@ -577,7 +541,7 @@ class Meta:
577541
"is_started",
578542
"is_ended",
579543
"is_joined",
580-
"attendees",
544+
"attendees_count",
581545
"created_by",
582546
"created_by_id",
583547
]

0 commit comments

Comments
 (0)