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