Skip to content

Commit 6b5c7fe

Browse files
committed
add migration code
1 parent ea05ff9 commit 6b5c7fe

1 file changed

Lines changed: 33 additions & 93 deletions

File tree

user_migrate.py

Lines changed: 33 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -7,115 +7,55 @@
77

88
mydb = 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
'''
4346
migrate_db:
4447
45-
Migrates all users to new format in a new table called taskLists
48+
Migrates all users to new format
4649
'''
4750
def 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

Comments
 (0)