1
1
from django .core .management .base import BaseCommand
2
2
from typing import Any , Optional
3
- from db .achievement import Achievement , UserAchievements
3
+ from db .achievement import Achievement , UserAchievementsLog
4
+ from django .conf import settings
4
5
5
6
from db .user import User
6
7
@@ -17,9 +18,14 @@ def handle(self, *args: Any, **options: Any) -> Optional[str]:
17
18
levels = {}
18
19
19
20
for i in range (1 , 7 ):
20
- levels [i ] = Achievement .objects .get (level__level_order = i )
21
+ levels [i ] = Achievement .objects .filter (level_id__level_order = i ).first ()
22
+ i = 0
23
+ print ("started generating achievements" )
21
24
22
25
for user in users :
26
+ i += 1
27
+ if i % 100 == 0 :
28
+ print ("Processed users: " , i )
23
29
try :
24
30
level_link = user .user_lvl_link_user
25
31
except :
@@ -28,11 +34,24 @@ def handle(self, *args: Any, **options: Any) -> Optional[str]:
28
34
continue
29
35
level = level_link .level
30
36
level_order = level .level_order
37
+
38
+ batch = []
39
+
31
40
for i in range (1 , level_order + 1 ):
32
- achievement = levels [i ]
33
- UserAchievements .objects .create (
41
+ achievement = levels .get (i )
42
+ if not achievement :
43
+ continue
44
+ if UserAchievementsLog .objects .filter (
34
45
user_id = user , achievement_id = achievement
46
+ ).exists ():
47
+ continue
48
+ batch .append (
49
+ UserAchievementsLog (
50
+ user_id = user ,
51
+ achievement_id = achievement ,
52
+ created_by = settings .SYSTEM_ADMIN_ID ,
53
+ updated_by = settings .SYSTEM_ADMIN_ID ,
54
+ )
35
55
)
36
- print (
37
- "Achievements generated for user: " , user .muid , "Level: " , level_order
38
- )
56
+ UserAchievementsLog .objects .bulk_create (batch )
57
+ print ("added user acheivements for users" )
0 commit comments