gitscope
← marzneshin / v0.5.5 / app/tasks/reset_user_data_usage.py
https://dev.kronoz.win/r/marzneshin.git
app/tasks/reset_user_data_usage.py · Python
Blame Raw
 1import logging
 2from datetime import datetime
 3
 4from app import marznode
 5from app.db import crud, GetDB, get_users
 6from app.models.user import UserDataUsageResetStrategy
 7
 8logger = logging.getLogger(__name__)
 9
10reset_strategy_to_days = {
11    UserDataUsageResetStrategy.day.value: 1,
12    UserDataUsageResetStrategy.week.value: 7,
13    UserDataUsageResetStrategy.month.value: 30,
14    UserDataUsageResetStrategy.year.value: 365,
15}
16
17
18async def reset_user_data_usage():
19    now = datetime.utcnow()
20    with GetDB() as db:
21        for user in get_users(
22            db,
23            reset_strategy=[
24                UserDataUsageResetStrategy.day.value,
25                UserDataUsageResetStrategy.week.value,
26                UserDataUsageResetStrategy.month.value,
27                UserDataUsageResetStrategy.year.value,
28            ],
29        ):
30            last_reset_time = user.traffic_reset_at or user.created_at
31            num_days_to_reset = reset_strategy_to_days[
32                user.data_limit_reset_strategy
33            ]
34
35            if not (now - last_reset_time).days >= num_days_to_reset:
36                continue
37
38            was_active = user.is_active
39            crud.reset_user_data_usage(db, user)
40            # make user active if limited on usage reset
41            if user.is_active and not was_active:
42                marznode.operations.update_user(user)
43                user.activated = True
44                db.commit()
45
46            logger.info("User data usage reset for User `%s`", user.username)