gitscope
← marzneshin / Diff · 42a1073 → 42a1073
Changes 42a1073..42a1073
Patch commit
diff --git a/app/db/crud.py b/app/db/crud.py
index 79f71cd..94b21cf 100644
--- a/app/db/crud.py
+++ b/app/db/crud.py
@@ -20,7 +20,6 @@ from app.db.models import (
Inbound,
System,
User,
- UserUsageResetLogs,
)
from app.models.admin import AdminCreate, AdminModify, AdminPartialModify
from app.models.node import NodeCreate, NodeModify, NodeStatus, NodeUsageResponse
@@ -396,14 +395,11 @@ def update_user(db: Session, dbuser: User, modify: UserModify):
def reset_user_data_usage(db: Session, dbuser: User):
- usage_log = UserUsageResetLogs(
- user=dbuser,
- used_traffic_at_reset=dbuser.used_traffic,
- )
- db.add(usage_log)
+ dbuser.lifetime_used_traffic += dbuser.used_traffic
+ dbuser.traffic_reset_at = datetime.utcnow()
dbuser.used_traffic = 0
- dbuser.node_usages.clear()
+
if dbuser.status == UserStatus.limited:
dbuser.status = UserStatus.active.value
db.add(dbuser)
diff --git a/app/db/migrations/versions/058eb11c5b17_user_reset_in_table.py b/app/db/migrations/versions/058eb11c5b17_user_reset_in_table.py
new file mode 100644
index 0000000..b0bbe1d
--- /dev/null
+++ b/app/db/migrations/versions/058eb11c5b17_user_reset_in_table.py
@@ -0,0 +1,45 @@
+"""empty message
+
+Revision ID: 058eb11c5b17
+Revises: 74e234a3bd4b
+Create Date: 2024-05-26 21:16:06.762089
+
+"""
+
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = "058eb11c5b17"
+down_revision = "74e234a3bd4b"
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table("user_usage_logs")
+ op.add_column(
+ "users", sa.Column("lifetime_used_traffic", sa.BigInteger(), nullable=True)
+ )
+ op.add_column("users", sa.Column("traffic_reset_at", sa.DateTime(), nullable=True))
+ # ### end Alembic commands ###
+
+
+def downgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column("users", "traffic_reset_at")
+ op.drop_column("users", "lifetime_used_traffic")
+ op.create_table(
+ "user_usage_logs",
+ sa.Column("id", sa.INTEGER(), nullable=False),
+ sa.Column("user_id", sa.INTEGER(), nullable=True),
+ sa.Column("used_traffic_at_reset", sa.BIGINT(), nullable=False),
+ sa.Column("reset_at", sa.DATETIME(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["user_id"],
+ ["users.id"],
+ ),
+ sa.PrimaryKeyConstraint("id"),
+ )
+ # ### end Alembic commands ###
diff --git a/app/db/models.py b/app/db/models.py
index 1e6a143..497d2f6 100644
--- a/app/db/models.py
+++ b/app/db/models.py
@@ -91,6 +91,8 @@ class User(Base):
# proxies = relationship("Proxy", back_populates="user", cascade="all, delete-orphan")
status = Column(Enum(UserStatus), nullable=False, default=UserStatus.active)
used_traffic = Column(BigInteger, default=0)
+ lifetime_used_traffic = Column(BigInteger, default=0)
+ traffic_reset_at = Column(DateTime)
node_usages = relationship(
"NodeUserUsage",
back_populates="user",
@@ -110,9 +112,6 @@ class User(Base):
)
ip_limit = Column(Integer, nullable=False, default=-1)
settings = Column(String(1024))
- usage_logs = relationship(
- "UserUsageResetLogs", back_populates="user", lazy="joined"
- )
expire = Column(DateTime)
admin_id = Column(Integer, ForeignKey("admins.id"))
admin = relationship("Admin", back_populates="users")
@@ -125,27 +124,6 @@ class User(Base):
on_hold_timeout = Column(DateTime)
edit_at = Column(DateTime)
- @property
- def lifetime_used_traffic(self):
- return (
- sum([log.used_traffic_at_reset for log in self.usage_logs])
- + self.used_traffic
- )
-
- @property
- def last_traffic_reset_time(self):
- return self.usage_logs[-1].reset_at if self.usage_logs else self.created_at
-
-
-class UserUsageResetLogs(Base):
- __tablename__ = "user_usage_logs"
-
- id = Column(Integer, primary_key=True)
- user_id = Column(Integer, ForeignKey("users.id"))
- user = relationship("User", back_populates="usage_logs")
- used_traffic_at_reset = Column(BigInteger, nullable=False)
- reset_at = Column(DateTime, default=datetime.utcnow)
-
class Inbound(Base):
__tablename__ = "inbounds"