9
9
import uuid
10
10
from django .utils .timezone import now
11
11
from django .core .exceptions import ObjectDoesNotExist , ValidationError
12
+
13
+
12
14
class AchievementListAPIView (APIView ):
13
15
def get (self , request ):
14
16
user_id = JWTUtils .fetch_user_id (request )
15
17
16
18
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 ()
18
22
19
23
user = User .objects .filter (id = user_id ).first ()
20
24
21
25
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 ()
23
29
24
30
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 ()
26
38
27
- return CustomResponse (response = achievements_serializer .data ).get_success_response ()
28
39
29
40
class AchievementCreateAPIView (APIView ):
30
41
def post (self , request ):
31
42
user_id = JWTUtils .fetch_user_id (request )
32
43
33
44
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 ()
35
48
36
49
user = User .objects .filter (id = user_id ).first ()
37
50
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 ()
39
54
40
55
data = request .data
41
56
required_fields = ["name" , "description" , "icon" , "tags" , "type" , "has_vc" ]
@@ -47,14 +62,18 @@ def post(self, request):
47
62
).get_failure_response ()
48
63
49
64
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 ()
51
68
52
69
level = None
53
70
if "level_id" in data and data ["level_id" ]:
54
71
try :
55
72
level = Level .objects .get (id = data ["level_id" ])
56
73
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 ()
58
77
59
78
achievement = Achievement .objects .create (
60
79
id = str (uuid .uuid4 ()),
@@ -73,27 +92,36 @@ def post(self, request):
73
92
)
74
93
75
94
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 ()
77
97
78
98
79
99
class AchievementUpdateAPIView (APIView ):
80
100
def put (self , request , achievement_id = None ):
81
101
user_id = JWTUtils .fetch_user_id (request )
82
102
83
103
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 ()
85
107
86
108
user = User .objects .filter (id = user_id ).first ()
87
109
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 ()
89
113
90
114
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 ()
92
118
93
119
try :
94
120
achievement = Achievement .objects .get (id = achievement_id )
95
121
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 ()
97
125
98
126
data = request .data .copy ()
99
127
data ["updated_by" ] = user_id
@@ -104,106 +132,139 @@ def put(self, request, achievement_id=None):
104
132
level = Level .objects .get (id = data ["level_id" ])
105
133
data ["level_id" ] = level .id
106
134
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 ()
108
138
else :
109
139
data ["level_id" ] = None
110
140
111
- serializer = achievement_serializer .AchievementSerializer (achievement , data = data , partial = True )
141
+ serializer = achievement_serializer .AchievementSerializer (
142
+ achievement , data = data , partial = True
143
+ )
112
144
113
145
if serializer .is_valid ():
114
146
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 ()
116
150
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 ()
118
154
119
155
120
156
class AchievementDeleteAPIView (APIView ):
121
157
def delete (self , request , achievement_id ):
122
158
user_id = JWTUtils .fetch_user_id (request )
123
159
124
160
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 ()
126
164
127
165
user = User .objects .filter (id = user_id ).first ()
128
166
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 ()
130
170
131
171
try :
132
172
achievement = Achievement .objects .get (id = achievement_id )
133
173
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 ()
135
177
136
178
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
+
138
183
139
184
class UserAchievementsListAPIView (APIView ):
140
185
def get (self , request , muid ):
141
186
try :
142
187
user = get_object_or_404 (User , muid = muid )
143
188
144
189
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
+ )
149
201
)
150
202
203
+ # if not user_achievements.exists():
204
+ # return CustomResponse(
205
+ # general_message="No achievements found for this user"
206
+ # ).get_failure_response()
151
207
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
+ )
157
211
return CustomResponse (response = serializer .data ).get_success_response ()
158
212
159
213
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 ()
161
217
162
218
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 ()
164
222
165
223
166
224
class UserAchievementsIssueAPIView (APIView ):
167
225
def post (self , request ):
168
226
user_id = JWTUtils .fetch_user_id (request )
169
227
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 ()
171
231
172
232
achievement_id = request .data .get ("achievement_id" )
173
233
vc_url = request .data .get ("vc_url" )
174
234
175
235
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 ()
177
239
178
240
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 ()
180
244
181
245
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 ()
183
249
184
250
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
+ )
186
254
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 ()
188
258
189
259
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 ()
208
263
264
+ UserAchievementsLog .objects .filter (
265
+ user_id = user_id , achievement_id = achievement_id
266
+ ).update (is_issued = True , vc_url = vc_url )
209
267
268
+ return CustomResponse (
269
+ general_message = "Achievement issued successfully"
270
+ ).get_success_response ()
0 commit comments