Skip to content

Commit 0aa40ca

Browse files
authored
Merge pull request #107 from rmobis/rmobis/clm-integration
add clm current task migration endpoint
2 parents a74d833 + 4fcaec8 commit 0aa40ca

5 files changed

Lines changed: 38 additions & 9 deletions

File tree

task_api.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from functools import wraps
77
from http import HTTPStatus
88

9-
from task_database import complete_task, generate_task, get_user, manual_complete_tasks, manual_revert_tasks
9+
from task_database import complete_task, generate_task, get_user, manual_complete_tasks, manual_revert_tasks, migrate_current_task
1010
from app_setup import app, db
1111
from tasklists import get_task_tier, list_for_tier
1212
from templesync import sync_user_tasks
@@ -72,6 +72,7 @@ def apiv2_get_user_profile(user: UserDatabaseObject):
7272
'username': user.username,
7373
'is_official': user.is_official,
7474
'is_lms_enabled': user.lms_enabled,
75+
'has_migrated': user.has_migrated,
7576
'active_task_id': user.current_task_id(),
7677
'completed_tasks': [
7778
*user.easy.completed_tasks,
@@ -128,3 +129,16 @@ def apiv2_sync(user: UserDatabaseObject):
128129
'completed': list(changed_tasks[0]),
129130
'uncompleted': list(changed_tasks[1])
130131
}
132+
133+
134+
@app.route('/api/v2/user/migrate', methods=['POST'])
135+
@token_required_v2
136+
def apiv2_migrate(user: UserDatabaseObject):
137+
body = request.json
138+
139+
new_current_task_id = body['task_id']
140+
141+
if not migrate_current_task(user.username, new_current_task_id):
142+
return { 'error': 'User has already migrated' }, HTTPStatus.BAD_REQUEST
143+
144+
return Response(status=HTTPStatus.NO_CONTENT)

task_database.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ def get_first_task_instance(generated_task: TaskData, incomplete_tasks: list[Tas
448448
key=lambda task: getattr(task.verification, "count", 0))
449449
return first_task_instance
450450
return generated_task
451-
451+
452452
tasks_easy = get_incomplete_tasks('easy')
453453
tasks_medium = get_incomplete_tasks('medium')
454454
tasks_hard = get_incomplete_tasks('hard')
@@ -460,31 +460,31 @@ def get_first_task_instance(generated_task: TaskData, incomplete_tasks: list[Tas
460460
first_task_instance = get_first_task_instance(generated_task, tasks_easy)
461461
__set_current_task(username, 'easyTasks', first_task_instance.id, True)
462462
return first_task_instance
463-
463+
464464
elif len(tasks_medium) != 0:
465465
generated_task = random.choice(tasks_medium)
466466
first_task_instance = get_first_task_instance(generated_task, tasks_medium)
467467
__set_current_task(username, 'mediumTasks', first_task_instance.id, True)
468468
return first_task_instance
469-
469+
470470
elif len(tasks_hard) != 0:
471471
generated_task = random.choice(tasks_hard)
472472
first_task_instance = get_first_task_instance(generated_task, tasks_hard)
473473
__set_current_task(username, 'hardTasks', first_task_instance.id, True)
474474
return first_task_instance
475-
475+
476476
elif len(tasks_elite) != 0:
477477
generated_task = random.choice(tasks_elite)
478478
first_task_instance = get_first_task_instance(generated_task, tasks_elite)
479479
__set_current_task(username, 'eliteTasks', first_task_instance.id, True)
480480
return first_task_instance
481-
481+
482482
elif len(tasks_master) != 0:
483483
generated_task = random.choice(tasks_master)
484484
first_task_instance = get_first_task_instance(generate_task, tasks_master)
485485
__set_current_task(username, 'masterTasks', first_task_instance.id, True)
486486
return first_task_instance
487-
487+
488488
return None
489489

490490
# If user has just completed a task of the given tier and the progress is 100, then they've just completed the last task
@@ -1733,6 +1733,19 @@ def copy_tier_tasks(source_username: str, target_username: str, tiers: list[str]
17331733
{"$set": updates}
17341734
)
17351735

1736+
def migrate_current_task(username: str, task_id: str | None) -> bool:
1737+
user = get_user(username)
1738+
1739+
if user.has_migrated:
1740+
return False
1741+
1742+
__set_current_task(username, tasklists.get_task_tier(task_id), task_id, task_id is not None)
1743+
1744+
coll = mydb['taskLists']
1745+
coll.update_one({ 'username': username }, { '$set': { 'hasMigrated': True } })
1746+
1747+
return True
1748+
17361749
if __name__ == "__main__":
17371750
copy_tier_tasks("AreYaTasking", 'Gerni Task2', tiers=["easy", "medium", "hard", "elite", "master"])
17381751
# fix_gerni()

tasklists.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def read_tasks(filename: str) -> list[TaskData]:
4242
json_list = json.load(f)
4343
return list(map(to_task_class, json_list.get('tasks')))
4444

45-
def get_task_tier(task_id: str) -> str:
45+
def get_task_tier(task_id: str | None) -> str | None:
4646
tiers = ['easy', 'medium', 'hard', 'elite', 'master', 'passive', 'extra', 'pets']
4747
for tier in tiers:
4848
tier_tasks = list_for_tier(tier)

templesync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def sync_user_tasks(username: str, collection_log: set[int], diaries: dict, skil
221221

222222
current_task_id = user.current_task_id()
223223
if current_task_id in new_completed_tasks:
224-
__set_current_task(username, None, None, False)
224+
__set_current_task(username, tasklists.get_task_tier(current_task_id), None, False)
225225

226226
return new_completed_tasks, new_uncompleted_tasks
227227

user_dao.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class UserDatabaseObject:
3737
username: str
3838
is_official: bool
3939
lms_enabled: bool
40+
has_migrated: bool
4041
easy: UserTaskList
4142
medium: UserTaskList
4243
hard: UserTaskList
@@ -310,6 +311,7 @@ def convert_database_tier(tier: str) -> UserTaskList:
310311
username=user_data['username'],
311312
is_official=user_data['isOfficial'],
312313
lms_enabled=user_data['lmsEnabled'],
314+
has_migrated=user_data.get('hasMigrated', False),
313315
easy=convert_database_tier('easy'),
314316
medium=convert_database_tier('medium'),
315317
hard=convert_database_tier('hard'),

0 commit comments

Comments
 (0)