|
3 | 3 | """ |
4 | 4 |
|
5 | 5 | import calendar |
6 | | -from datetime import datetime, timedelta, date |
| 6 | +from datetime import datetime, timedelta, date, timezone |
7 | 7 | import math |
8 | 8 | import os |
9 | 9 | from typing import Union |
@@ -69,6 +69,15 @@ class User(db.Model): |
69 | 69 | last_task_completed: int = db.Column( |
70 | 70 | db.Integer, default=-1, server_default=text("-1"), nullable=False |
71 | 71 | ) # user last task completion ID |
| 72 | + last_time_clicked: datetime = db.Column( |
| 73 | + db.DateTime, |
| 74 | + default=datetime.now(timezone.utc), |
| 75 | + server_default=func.current_timestamp(), |
| 76 | + nullable=False, |
| 77 | + ) # user last time clicked |
| 78 | + time_multiplier: int = db.Column( |
| 79 | + db.Integer, default=1, server_default="1", nullable=False |
| 80 | + ) # user time multiplier |
72 | 81 |
|
73 | 82 | def add_xp(self, amount: float) -> None: # add XP |
74 | 83 | """ |
@@ -374,6 +383,28 @@ def complete_task(task_id) -> Response: # complete task from task ID |
374 | 383 | user.last_task_completed = ( |
375 | 384 | task.id |
376 | 385 | ) # set user last task completed to task ID |
| 386 | + current_time: datetime = datetime.now( |
| 387 | + timezone.utc) # get current time |
| 388 | + last_time_clicked_aware: datetime = self.last_time_clicked.replace( |
| 389 | + tzinfo=timezone.utc |
| 390 | + ) # set timezone to UTC |
| 391 | + time_difference: timedelta = ( |
| 392 | + current_time - last_time_clicked_aware |
| 393 | + ) # get time difference |
| 394 | + time_difference_seconds: float = ( |
| 395 | + time_difference.total_seconds() |
| 396 | + ) # get time difference in seconds |
| 397 | + if ( |
| 398 | + abs(time_difference_seconds) < 5 |
| 399 | + ): # check if time difference is less than 5 seconds |
| 400 | + self.time_multiplier += 1 # increase time multiplier |
| 401 | + else: |
| 402 | + self.time_multiplier = ( |
| 403 | + 1 # reset time multiplier if time difference is more than 5 seconds |
| 404 | + ) |
| 405 | + self.last_time_clicked = ( |
| 406 | + current_time # set last time clicked to current time |
| 407 | + ) |
377 | 408 | user.add_xp( |
378 | 409 | round( |
379 | 410 | task.priority |
|
0 commit comments