Skip to content

Commit 19d2b77

Browse files
committed
fix(achievement): resolve syntax error and improve code quality
1 parent 9db9ad5 commit 19d2b77

File tree

1 file changed

+45
-51
lines changed

1 file changed

+45
-51
lines changed

api/dashboard/achievement/achievement_views.py

Lines changed: 45 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
1-
from rest_framework.generics import get_object_or_404
2-
from rest_framework.views import APIView
3-
from django.http import FileResponse
1+
import json
2+
import os
3+
import uuid
44
from io import BytesIO
5+
56
import openpyxl
6-
from db.achievement import Achievement, UserAchievementsLog
7-
from db.user import User
7+
from django.conf import settings
8+
from django.core.exceptions import ValidationError
89
from django.db.models import Q
9-
from utils.types import RoleType
10+
from django.http import FileResponse
11+
from django.utils.timezone import now
12+
from rest_framework.generics import get_object_or_404
13+
from rest_framework.parsers import FormParser, MultiPartParser
14+
from rest_framework.views import APIView
15+
16+
from db.achievement import (
17+
Achievement,
18+
AchievementAuditLog,
19+
AchievementRule,
20+
UserAchievementsLog,
21+
)
22+
from db.task import Level
23+
from db.user import User
24+
from utils.permission import JWTUtils
25+
from utils.response import CustomResponse
1026
from utils.utils import CommonUtils
1127
from . import achievement_serializer
12-
from db.achievement import Achievement, UserAchievementsLog, AchievementRule, AchievementAuditLog
13-
from utils.response import CustomResponse
14-
from utils.permission import JWTUtils
15-
from db.user import User
16-
from db.task import Level
17-
import uuid
18-
from django.utils.timezone import now
19-
from django.core.exceptions import ObjectDoesNotExist, ValidationError
20-
from utils.utils import ImportCSV
2128

2229

2330
class AchievementListAPIView(APIView):
@@ -47,9 +54,8 @@ def get(self, request):
4754

4855

4956
class AchievementCreateAPIView(APIView):
50-
from rest_framework.parsers import MultiPartParser, FormParser
5157
parser_classes = [MultiPartParser, FormParser]
52-
58+
5359
def post(self, request):
5460
user_id = JWTUtils.fetch_user_id(request)
5561

@@ -81,10 +87,8 @@ def post(self, request):
8187
if isinstance(has_vc_value, str):
8288
has_vc_value = has_vc_value.lower() in ("true", "1", "yes")
8389

84-
# Parse tags from JSON string to list (FormData sends strings)
8590
tags_value = data.get("tags", [])
8691
if isinstance(tags_value, str):
87-
import json
8892
try:
8993
tags_value = json.loads(tags_value)
9094
except json.JSONDecodeError:
@@ -107,9 +111,6 @@ def post(self, request):
107111
# Handle icon file upload
108112
icon_path = icon_url # Default to URL if provided
109113
if icon_file:
110-
import os
111-
from django.conf import settings
112-
113114
# Validate file type
114115
allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg']
115116
file_ext = icon_file.name.split('.')[-1].lower()
@@ -162,9 +163,8 @@ def post(self, request):
162163

163164

164165
class AchievementUpdateAPIView(APIView):
165-
from rest_framework.parsers import MultiPartParser, FormParser
166166
parser_classes = [MultiPartParser, FormParser]
167-
167+
168168
def put(self, request, achievement_id=None):
169169
user_id = JWTUtils.fetch_user_id(request)
170170

@@ -202,9 +202,6 @@ def put(self, request, achievement_id=None):
202202
# Handle icon file upload
203203
icon_file = request.FILES.get("icon")
204204
if icon_file:
205-
import os
206-
from django.conf import settings
207-
208205
# Validate file type
209206
allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg']
210207
file_ext = icon_file.name.split('.')[-1].lower()
@@ -260,7 +257,6 @@ def put(self, request, achievement_id=None):
260257
if "tags" in data:
261258
tags_value = data.get("tags", [])
262259
if isinstance(tags_value, str):
263-
import json
264260
try:
265261
data["tags"] = json.loads(tags_value)
266262
except json.JSONDecodeError:
@@ -290,8 +286,7 @@ def delete(self, request, achievement_id):
290286
general_message="Invalid or missing token"
291287
).get_failure_response()
292288

293-
user = User.objects.filter(id=user_id).first()
294-
if not user:
289+
if not User.objects.filter(id=user_id).exists():
295290
return CustomResponse(
296291
general_message="User Not Exists"
297292
).get_failure_response()
@@ -522,12 +517,11 @@ class AchievementRuleCreateAPIView(APIView):
522517
"""Create a new achievement rule (admin)"""
523518

524519
def post(self, request):
525-
try:
526-
user_id = JWTUtils.fetch_user_id(request)
527-
if not user_id:
528-
return CustomResponse(
529-
general_message="Invalid or missing token"
530-
).get_failure_response()
520+
user_id = JWTUtils.fetch_user_id(request)
521+
if not user_id:
522+
return CustomResponse(
523+
general_message="Invalid or missing token"
524+
).get_failure_response()
531525

532526
data = request.data
533527
required_fields = ["achievement_id", "rule_type", "conditions"]
@@ -875,7 +869,7 @@ def post(self, request):
875869
required_headers = ['muid', 'achievement_id']
876870

877871
if not all(h in headers for h in required_headers):
878-
return CustomResponse(
872+
return CustomResponse(
879873
general_message=f"Missing required headers. Required: {required_headers}"
880874
).get_failure_response()
881875

@@ -892,14 +886,14 @@ def post(self, request):
892886
achievement_id = row[ach_idx]
893887

894888
if not muid or not achievement_id:
895-
continue
889+
continue
896890

897891
try:
898892
user = User.objects.filter(muid=muid).first()
899893
if not user:
900-
failed_rows.append({"row": i, "muid": muid, "reason": "User not found"})
901-
continue
902-
894+
failed_rows.append({"row": i, "muid": muid, "reason": "User not found"})
895+
continue
896+
903897
result = manual_issue_achievement(
904898
user_id=str(user.id),
905899
achievement_id=str(achievement_id),
@@ -948,7 +942,7 @@ class AchievementLogListAPIView(APIView):
948942
def get(self, request):
949943
user_id = JWTUtils.fetch_user_id(request)
950944
if not user_id:
951-
return CustomResponse(
945+
return CustomResponse(
952946
general_message="Invalid or missing token"
953947
).get_failure_response()
954948

@@ -963,15 +957,15 @@ def get(self, request):
963957

964958
data = []
965959
for log in paginated_queryset.get('queryset'):
966-
data.append({
967-
"id": str(log.id),
968-
"muid": log.user.muid,
969-
"user_name": log.user.full_name,
970-
"achievement_name": log.achievement_id.name,
971-
"is_issued": log.is_issued,
972-
"created_at": log.created_at.isoformat() if log.created_at else None,
973-
"issued_by": log.updated_by.full_name if log.updated_by else None
974-
})
960+
data.append({
961+
"id": str(log.id),
962+
"muid": log.user.muid,
963+
"user_name": log.user.full_name,
964+
"achievement_name": log.achievement_id.name,
965+
"is_issued": log.is_issued,
966+
"created_at": log.created_at.isoformat() if log.created_at else None,
967+
"issued_by": log.updated_by.full_name if log.updated_by else None
968+
})
975969

976970
return CustomResponse().paginated_response(
977971
data=data,

0 commit comments

Comments
 (0)