优化电竞手册换绑时间展示
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
"""新增电竞手册可换绑时间
|
||||
|
||||
Revision ID: 20260728_0012
|
||||
Revises: 20260728_0011
|
||||
Create Date: 2026-07-28
|
||||
"""
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
revision: str = "20260728_0012"
|
||||
down_revision: Union[str, None] = "20260728_0011"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {column["name"] for column in sa.inspect(bind).get_columns("accounts")}
|
||||
if "esports_can_change_time" not in columns:
|
||||
op.add_column("accounts", sa.Column("esports_can_change_time", sa.Integer(), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {column["name"] for column in sa.inspect(bind).get_columns("accounts")}
|
||||
if "esports_can_change_time" in columns:
|
||||
op.drop_column("accounts", "esports_can_change_time")
|
||||
@@ -69,6 +69,7 @@ class Account(Base):
|
||||
esports_game_channel = Column(String(128), default="")
|
||||
esports_bind_status = Column(String(32), default="")
|
||||
esports_change_role_wait_time = Column(Integer, nullable=True)
|
||||
esports_can_change_time = Column(Integer, nullable=True)
|
||||
created_at = Column(DateTime, default=_utcnow)
|
||||
updated_at = Column(DateTime, default=_utcnow, onupdate=_utcnow)
|
||||
|
||||
|
||||
@@ -112,6 +112,7 @@ def _account_out(account: Account) -> DouyuTaskAccountOut:
|
||||
esports_game_channel=account.esports_game_channel or "",
|
||||
esports_bind_status=account.esports_bind_status or "",
|
||||
esports_change_role_wait_time=account.esports_change_role_wait_time,
|
||||
esports_can_change_time=account.esports_can_change_time,
|
||||
assigned_to=account.assigned_to,
|
||||
assigned_username=account.assigned_user.username if account.assigned_user else None,
|
||||
)
|
||||
|
||||
@@ -671,6 +671,7 @@ class DouyuTaskAccountOut(BaseModel):
|
||||
esports_game_channel: str = ""
|
||||
esports_bind_status: str = ""
|
||||
esports_change_role_wait_time: Optional[int] = None
|
||||
esports_can_change_time: Optional[int] = None
|
||||
assigned_to: Optional[int] = None
|
||||
assigned_username: Optional[str] = None
|
||||
|
||||
|
||||
@@ -174,6 +174,10 @@ class DouyuBatchRunner:
|
||||
"""综合 can_change_role 与换绑倒计时判断是否允许换绑。"""
|
||||
if not bind_info:
|
||||
return True
|
||||
if str(bind_info.get("api_version") or "") == "esports":
|
||||
can_change_time = cls._to_int(bind_info.get("can_change_time"))
|
||||
if can_change_time is not None:
|
||||
return can_change_time <= int(datetime.now(timezone.utc).timestamp())
|
||||
wait_time = cls._to_int(bind_info.get("change_role_wait_time"))
|
||||
if wait_time is not None and wait_time > 0:
|
||||
return False
|
||||
@@ -247,6 +251,7 @@ class DouyuBatchRunner:
|
||||
"need_bind_act": self._is_truthy_flag(info.get("need_bind_act")),
|
||||
"need_bind_role": self._is_truthy_flag(info.get("need_bind_role")),
|
||||
"change_role_wait_time": self._to_int(info.get("change_role_wait_time")),
|
||||
"can_change_time": self._to_int(info.get("can_change_time")),
|
||||
"can_change_role": self._can_change_role(info),
|
||||
"bind_info": info,
|
||||
}
|
||||
@@ -266,6 +271,7 @@ class DouyuBatchRunner:
|
||||
f" need_act={1 if snap['need_bind_act'] else 0}"
|
||||
f" need_role={1 if snap['need_bind_role'] else 0}"
|
||||
f" wait={snap['change_role_wait_time'] if snap['change_role_wait_time'] is not None else '-'}"
|
||||
f" can_change_time={snap['can_change_time'] if snap['can_change_time'] is not None else '-'}"
|
||||
f"{pending_text}"
|
||||
)
|
||||
|
||||
@@ -283,6 +289,7 @@ class DouyuBatchRunner:
|
||||
account.esports_game_name = role_name or account.esports_game_name
|
||||
account.esports_game_channel = self._role_channel(bind_info) or account.esports_game_channel
|
||||
account.esports_change_role_wait_time = self._to_int(bind_info.get("change_role_wait_time"))
|
||||
account.esports_can_change_time = self._to_int(bind_info.get("can_change_time"))
|
||||
account.esports_bind_status = status
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user