mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 12:25:20 +00:00
refac
This commit is contained in:
parent
8ef482a52a
commit
c2634d45ad
2 changed files with 23 additions and 18 deletions
|
|
@ -113,24 +113,12 @@ def _convert_column_to_text(table: str, column: str):
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
def upgrade() -> None:
|
||||||
|
|
||||||
op.add_column(
|
|
||||||
"user",
|
|
||||||
sa.Column(
|
|
||||||
"is_active",
|
|
||||||
sa.Boolean(),
|
|
||||||
nullable=False,
|
|
||||||
default=False,
|
|
||||||
server_default=sa.sql.expression.false(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
op.add_column(
|
op.add_column(
|
||||||
"user", sa.Column("profile_banner_image_url", sa.Text(), nullable=True)
|
"user", sa.Column("profile_banner_image_url", sa.Text(), nullable=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
op.add_column("user", sa.Column("timezone", sa.String(), nullable=True))
|
op.add_column("user", sa.Column("timezone", sa.String(), nullable=True))
|
||||||
|
|
||||||
|
op.add_column("user", sa.Column("presence_state", sa.String(), nullable=True))
|
||||||
op.add_column("user", sa.Column("status_emoji", sa.String(), nullable=True))
|
op.add_column("user", sa.Column("status_emoji", sa.String(), nullable=True))
|
||||||
op.add_column("user", sa.Column("status_message", sa.Text(), nullable=True))
|
op.add_column("user", sa.Column("status_message", sa.Text(), nullable=True))
|
||||||
op.add_column(
|
op.add_column(
|
||||||
|
|
@ -249,11 +237,10 @@ def downgrade() -> None:
|
||||||
op.drop_table("api_key")
|
op.drop_table("api_key")
|
||||||
|
|
||||||
with op.batch_alter_table("user") as batch_op:
|
with op.batch_alter_table("user") as batch_op:
|
||||||
batch_op.drop_column("is_active")
|
|
||||||
|
|
||||||
batch_op.drop_column("profile_banner_image_url")
|
batch_op.drop_column("profile_banner_image_url")
|
||||||
batch_op.drop_column("timezone")
|
batch_op.drop_column("timezone")
|
||||||
|
|
||||||
|
batch_op.drop_column("presence_state")
|
||||||
batch_op.drop_column("status_emoji")
|
batch_op.drop_column("status_emoji")
|
||||||
batch_op.drop_column("status_message")
|
batch_op.drop_column("status_message")
|
||||||
batch_op.drop_column("status_expires_at")
|
batch_op.drop_column("status_expires_at")
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ class User(Base):
|
||||||
role = Column(String)
|
role = Column(String)
|
||||||
|
|
||||||
name = Column(String)
|
name = Column(String)
|
||||||
is_active = Column(Boolean, nullable=False, default=False)
|
|
||||||
|
|
||||||
profile_image_url = Column(Text)
|
profile_image_url = Column(Text)
|
||||||
profile_banner_image_url = Column(Text, nullable=True)
|
profile_banner_image_url = Column(Text, nullable=True)
|
||||||
|
|
@ -56,6 +55,7 @@ class User(Base):
|
||||||
date_of_birth = Column(Date, nullable=True)
|
date_of_birth = Column(Date, nullable=True)
|
||||||
timezone = Column(String, nullable=True)
|
timezone = Column(String, nullable=True)
|
||||||
|
|
||||||
|
presence_state = Column(String, nullable=True)
|
||||||
status_emoji = Column(String, nullable=True)
|
status_emoji = Column(String, nullable=True)
|
||||||
status_message = Column(Text, nullable=True)
|
status_message = Column(Text, nullable=True)
|
||||||
status_expires_at = Column(BigInteger, nullable=True)
|
status_expires_at = Column(BigInteger, nullable=True)
|
||||||
|
|
@ -78,7 +78,6 @@ class UserModel(BaseModel):
|
||||||
role: str = "pending"
|
role: str = "pending"
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
is_active: bool = False
|
|
||||||
|
|
||||||
profile_image_url: str
|
profile_image_url: str
|
||||||
profile_banner_image_url: Optional[str] = None
|
profile_banner_image_url: Optional[str] = None
|
||||||
|
|
@ -88,6 +87,7 @@ class UserModel(BaseModel):
|
||||||
date_of_birth: Optional[datetime.date] = None
|
date_of_birth: Optional[datetime.date] = None
|
||||||
timezone: Optional[str] = None
|
timezone: Optional[str] = None
|
||||||
|
|
||||||
|
presence_state: Optional[str] = None
|
||||||
status_emoji: Optional[str] = None
|
status_emoji: Optional[str] = None
|
||||||
status_message: Optional[str] = None
|
status_message: Optional[str] = None
|
||||||
status_expires_at: Optional[int] = None
|
status_expires_at: Optional[int] = None
|
||||||
|
|
@ -176,7 +176,7 @@ class UserIdNameResponse(BaseModel):
|
||||||
class UserIdNameStatusResponse(BaseModel):
|
class UserIdNameStatusResponse(BaseModel):
|
||||||
id: str
|
id: str
|
||||||
name: str
|
name: str
|
||||||
is_active: bool
|
is_active: bool = False
|
||||||
|
|
||||||
|
|
||||||
class UserInfoListResponse(BaseModel):
|
class UserInfoListResponse(BaseModel):
|
||||||
|
|
@ -636,5 +636,23 @@ class UsersTable:
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_active_user_count(self) -> int:
|
||||||
|
with get_db() as db:
|
||||||
|
# Consider user active if last_active_at within the last 3 minutes
|
||||||
|
three_minutes_ago = int(time.time()) - 180
|
||||||
|
count = (
|
||||||
|
db.query(User).filter(User.last_active_at >= three_minutes_ago).count()
|
||||||
|
)
|
||||||
|
return count
|
||||||
|
|
||||||
|
def is_user_active(self, user_id: str) -> bool:
|
||||||
|
with get_db() as db:
|
||||||
|
user = db.query(User).filter_by(id=user_id).first()
|
||||||
|
if user and user.last_active_at:
|
||||||
|
# Consider user active if last_active_at within the last 3 minutes
|
||||||
|
three_minutes_ago = int(time.time()) - 180
|
||||||
|
return user.last_active_at >= three_minutes_ago
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
Users = UsersTable()
|
Users = UsersTable()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue