77
88mydb = config .MONGO_CLIENT ["TaskApp" ]
99
10- def migrate_user_tier_list (tier_list ):
11- filtered_completed_tier_list = filter (lambda x : x ['status' ] == 'Complete' , tier_list )
12- converted_completed_tier_list = list (map (lambda x : {'taskId' : x ['_id' ]}, filtered_completed_tier_list ))
13- filtered_completed_tier_list = list (filter (lambda x : x ['taskCurrent' ], tier_list ))
10+ def migrate_task_list (tier_list : dict ):
11+ if ('currentTask' in tier_list ):
12+ tier_list ['currentTask' ] = { 'id' : tier_list ['currentTask' ]['uuid' ] }
13+
14+ tier_list ['completedTasks' ] = [{ 'id' : task ['uuid' ] } for task in tier_list ['completedTasks' ]]
15+ return tier_list
16+
17+ def merge_task_lists (tier_lists : list [dict ]):
1418 new_tier_list_object = {}
15- if len (filtered_completed_tier_list ) > 0 :
16- new_tier_list_object ['currentTask' ] = {
17- 'taskId' : filtered_completed_tier_list [0 ]['_id' ]
18- }
19- new_tier_list_object ['completedTasks' ] = converted_completed_tier_list
19+ # this dark magic somehow flattens a list
20+ new_tier_list_object ['completedTasks' ] = [task for tier_list in tier_lists for task in tier_list ['completedTasks' ]]
2021 return new_tier_list_object
2122
22- def migrate_database_user_to_new_format (user : dict ) -> dict :
23+ def migrate_database_task_list_to_new_format (user : dict ) -> dict :
2324 return {
2425 '_id' : user ['_id' ],
2526 'username' : user ['username' ],
2627 'isOfficial' : user ['isOfficial' ],
2728 'lmsEnabled' : user ['lmsEnabled' ],
2829 'tiers' : {
29- 'easy' : migrate_user_tier_list (user ['easyTasks' ]),
30- 'medium' : migrate_user_tier_list (user ['mediumTasks' ]),
31- 'hard' : migrate_user_tier_list (user ['hardTasks' ]),
32- 'elite' : migrate_user_tier_list (user ['eliteTasks' ]),
33- 'master' : migrate_user_tier_list (user ['masterTasks' ]),
34- 'passive' : migrate_user_tier_list (user ['passiveTasks' ]),
35- 'extra' : migrate_user_tier_list (user ['extraTasks' ]),
36- 'bossPets' : migrate_user_tier_list (user ['bossPetTasks' ]),
37- 'skillPets' : migrate_user_tier_list (user ['skillPetTasks' ]),
38- 'otherPets' : migrate_user_tier_list (user ['otherPetTasks' ])
30+ 'easy' : migrate_task_list (user ['tiers' ]['easy' ]),
31+ 'medium' : migrate_task_list (user ['tiers' ]['medium' ]),
32+ 'hard' : migrate_task_list (user ['tiers' ]['hard' ]),
33+ 'elite' : migrate_task_list (user ['tiers' ]['elite' ]),
34+ 'master' : migrate_task_list (user ['tiers' ]['master' ]),
35+ 'passive' : migrate_task_list (user ['tiers' ]['passive' ]),
36+ 'extra' : migrate_task_list (user ['tiers' ]['extra' ]),
37+ 'pets' : merge_task_lists ([
38+ migrate_task_list (user ['tiers' ]['bossPets' ]),
39+ migrate_task_list (user ['tiers' ]['skillPets' ]),
40+ migrate_task_list (user ['tiers' ]['otherPets' ]),
41+ ]),
3942 }
4043 }
4144
4245'''
4346migrate_db:
4447
45- Migrates all users to new format in a new table called taskLists
48+ Migrates all users to new format
4649'''
4750def migrate_db ():
48- coll = mydb ['taskAccounts' ]
49- new_coll = mydb ['taskLists' ] # Can't seem to find a way to easily rewrite to existing collection
50- new_coll .drop ()
51- users = coll .find ({}, {})
52-
53- for user in users :
54- new_coll .insert_one (migrate_database_user_to_new_format (user ))
55-
56-
57- # Below to replace task_database.py add user
58- '''
59- add_task_account:
60-
61- The add_task_account function creates the document for the user in the taskLists collection.
62- The document is structured as follows:
63- {
64- _id : randomly generated id user id,
65- username: '',
66- isOfficial: true/false,
67- lmsEnabled: false/false,
68- tiers: {
69- easyTier: {
70- currentTask: {
71- "taskId": Matches the ids in task JSONs,
72- "assignedDate": "some date/time format"
73- },
74- completedTasks: [ # only stores completed tasks
75- {
76- "taskId": "Maybe a new id field here that matches new field in task list jsons?",
77- "completionDate": "some date/time format", # both dates are nullable
78- "assignedDate": "some date/time format from above assignedDate field"
79- },...
80- ],
81- }
82- medium: {same as easyTier},
83- hard: {same as easyTier},
84- elite: {same as easyTier},
85- master: {same as easyTier},
86- passive: {same as easyTier},
87- extra: {same as easyTier},
88- bossPets: {same as easyTier},
89- skillPets: {same as easyTier},
90- otherPets: {same as easyTier}
91- }
92- }
93-
94- Args:
95- str: username - username of the user.
96- bool: is_official - True/False
97- bool: lms_enabled - True/False
51+ coll = mydb ['taskLists' ]
52+ task_lists = coll .find ({}, {})
9853
99- Returns:
100- None
54+ for task_list in task_lists :
55+ coll .replace_one (
56+ { 'username' : task_list ['username' ] },
57+ migrate_database_task_list_to_new_format (task_list ),
58+ )
10159
102- '''
103- def add_task_account (username , is_official , lms_enabled ):
104- coll = mydb ['taskLists' ]
105- coll .insert_one ({
106- "username" : str (username ),
107- "isOfficial" : bool (is_official ),
108- "lmsEnabled" : bool (lms_enabled ),
109- 'tiers' : {
110- 'easy' : [],
111- 'medium' : [],
112- 'hard' : [],
113- 'elite' : [],
114- 'master' : [],
115- 'passive' : [],
116- 'extra' : [],
117- 'bossPets' : [],
118- 'skillPets' : [],
119- 'otherPets' : []
120- }
121- })
60+ if __name__ == "__main__" :
61+ migrate_db ()
0 commit comments