chg: [app:scores] Added completion timestamp
This commit is contained in:
parent
96d5b6d89e
commit
6814294e77
2 changed files with 26 additions and 11 deletions
17
exercise.py
17
exercise.py
|
@ -247,8 +247,9 @@ def get_completion_for_users():
|
||||||
for task in exercise_status['tasks'].values():
|
for task in exercise_status['tasks'].values():
|
||||||
for user_id in completion_per_user.keys():
|
for user_id in completion_per_user.keys():
|
||||||
completion_per_user[int(user_id)][exercise_status['uuid']][task['uuid']] = False
|
completion_per_user[int(user_id)][exercise_status['uuid']][task['uuid']] = False
|
||||||
for user_id in task['completed_by_user']:
|
for entry in task['completed_by_user']:
|
||||||
completion_per_user[int(user_id)][exercise_status['uuid']][task['uuid']] = True
|
user_id = entry['user_id']
|
||||||
|
completion_per_user[int(user_id)][exercise_status['uuid']][task['uuid']] = entry
|
||||||
|
|
||||||
return completion_per_user
|
return completion_per_user
|
||||||
|
|
||||||
|
@ -268,13 +269,17 @@ def get_score_for_task_completion(tasks_completion: dict) -> int:
|
||||||
|
|
||||||
|
|
||||||
def mark_task_completed(user_id: int, exercise_uuid: str , task_uuid: str):
|
def mark_task_completed(user_id: int, exercise_uuid: str , task_uuid: str):
|
||||||
if user_id not in db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user']:
|
is_completed = any(filter(lambda x: x['user_id'] == user_id, db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user']))
|
||||||
db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user'].append(user_id)
|
if not is_completed:
|
||||||
|
db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user'].append({
|
||||||
|
'user_id': user_id,
|
||||||
|
'time': time.time(),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def mark_task_incomplete(user_id: int, exercise_uuid: str , task_uuid: str):
|
def mark_task_incomplete(user_id: int, exercise_uuid: str , task_uuid: str):
|
||||||
if user_id in db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user']:
|
completed_without_user = list(filter(lambda x: x['user_id'] != user_id, db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user']))
|
||||||
db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user'].remove(user_id)
|
db.EXERCISES_STATUS[exercise_uuid]['tasks'][task_uuid]['completed_by_user'] = completed_without_user
|
||||||
|
|
||||||
|
|
||||||
def get_progress():
|
def get_progress():
|
||||||
|
|
|
@ -99,12 +99,22 @@
|
||||||
class="select-none cursor-pointer text-nowrap"
|
class="select-none cursor-pointer text-nowrap"
|
||||||
@click="toggleCompleted(progress.exercises[exercise.uuid].tasks_completion[task.uuid], user_id, exercise.uuid, task.uuid)"
|
@click="toggleCompleted(progress.exercises[exercise.uuid].tasks_completion[task.uuid], user_id, exercise.uuid, task.uuid)"
|
||||||
>
|
>
|
||||||
|
<span class="flex flex-col">
|
||||||
|
<span>
|
||||||
<FontAwesomeIcon
|
<FontAwesomeIcon
|
||||||
:icon="progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? faCheck : faTimes"
|
:icon="progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? faCheck : faTimes"
|
||||||
:class="`text-xl ${progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? 'dark:text-green-400 text-green-600' : 'dark:text-slate-500 text-slate-400'}`"
|
:class="`text-xl ${progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? 'dark:text-green-400 text-green-600' : 'dark:text-slate-500 text-slate-400'}`"
|
||||||
/>
|
/>
|
||||||
<small :class="progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? 'dark:text-green-400 text-green-600' : 'dark:text-slate-500 text-slate-400'"> (+{{ task.score }})</small>
|
<small :class="progress.exercises[exercise.uuid].tasks_completion[task.uuid] ? 'dark:text-green-400 text-green-600' : 'dark:text-slate-500 text-slate-400'"> (+{{ task.score }})</small>
|
||||||
</span>
|
</span>
|
||||||
|
<span class="text-sm leading-3">
|
||||||
|
<span v-if="progress.exercises[exercise.uuid].tasks_completion[task.uuid].time">
|
||||||
|
{{ (new Date(progress.exercises[exercise.uuid].tasks_completion[task.uuid].time * 1000)).toTimeString().split(' ', 1)[0] }}
|
||||||
|
</span>
|
||||||
|
<span v-else></span>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="border-b border-slate-100 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-3">
|
<td class="border-b border-slate-100 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-3">
|
||||||
<div class="flex w-full h-2 bg-gray-200 rounded-full overflow-hidden dark:bg-neutral-600" role="progressbar" :aria-valuenow="progress.exercises[exercise.uuid].score" :aria-valuemin="0" aria-valuemax="100">
|
<div class="flex w-full h-2 bg-gray-200 rounded-full overflow-hidden dark:bg-neutral-600" role="progressbar" :aria-valuenow="progress.exercises[exercise.uuid].score" :aria-valuemin="0" aria-valuemax="100">
|
||||||
|
|
Loading…
Reference in a new issue