|
@@ -11,9 +11,10 @@ from open_webui.utils.misc import throttle
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
-from sqlalchemy import BigInteger, Column, String, Text
|
|
|
+from sqlalchemy import BigInteger, Column, String, Text, Date
|
|
|
from sqlalchemy import or_
|
|
|
|
|
|
+import datetime
|
|
|
|
|
|
####################
|
|
|
# User DB Schema
|
|
@@ -25,20 +26,28 @@ class User(Base):
|
|
|
|
|
|
id = Column(String, primary_key=True)
|
|
|
name = Column(String)
|
|
|
+
|
|
|
email = Column(String)
|
|
|
+ username = Column(String(50), nullable=True)
|
|
|
+
|
|
|
role = Column(String)
|
|
|
profile_image_url = Column(Text)
|
|
|
|
|
|
- last_active_at = Column(BigInteger)
|
|
|
- updated_at = Column(BigInteger)
|
|
|
- created_at = Column(BigInteger)
|
|
|
+ bio = Column(Text, nullable=True)
|
|
|
+ gender = Column(Text, nullable=True)
|
|
|
+ date_of_birth = Column(Date, nullable=True)
|
|
|
|
|
|
- api_key = Column(String, nullable=True, unique=True)
|
|
|
- settings = Column(JSONField, nullable=True)
|
|
|
info = Column(JSONField, nullable=True)
|
|
|
+ settings = Column(JSONField, nullable=True)
|
|
|
|
|
|
+ api_key = Column(String, nullable=True, unique=True)
|
|
|
oauth_sub = Column(Text, unique=True)
|
|
|
|
|
|
+ last_active_at = Column(BigInteger)
|
|
|
+
|
|
|
+ updated_at = Column(BigInteger)
|
|
|
+ created_at = Column(BigInteger)
|
|
|
+
|
|
|
|
|
|
class UserSettings(BaseModel):
|
|
|
ui: Optional[dict] = {}
|
|
@@ -49,20 +58,27 @@ class UserSettings(BaseModel):
|
|
|
class UserModel(BaseModel):
|
|
|
id: str
|
|
|
name: str
|
|
|
+
|
|
|
email: str
|
|
|
+ username: Optional[str] = None
|
|
|
+
|
|
|
role: str = "pending"
|
|
|
profile_image_url: str
|
|
|
|
|
|
- last_active_at: int # timestamp in epoch
|
|
|
- updated_at: int # timestamp in epoch
|
|
|
- created_at: int # timestamp in epoch
|
|
|
+ bio: Optional[str] = None
|
|
|
+ gender: Optional[str] = None
|
|
|
+ date_of_birth: Optional[datetime.date] = None
|
|
|
|
|
|
- api_key: Optional[str] = None
|
|
|
- settings: Optional[UserSettings] = None
|
|
|
info: Optional[dict] = None
|
|
|
+ settings: Optional[UserSettings] = None
|
|
|
|
|
|
+ api_key: Optional[str] = None
|
|
|
oauth_sub: Optional[str] = None
|
|
|
|
|
|
+ last_active_at: int # timestamp in epoch
|
|
|
+ updated_at: int # timestamp in epoch
|
|
|
+ created_at: int # timestamp in epoch
|
|
|
+
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
|
|
@@ -71,6 +87,14 @@ class UserModel(BaseModel):
|
|
|
####################
|
|
|
|
|
|
|
|
|
+class UpdateProfileForm(BaseModel):
|
|
|
+ profile_image_url: str
|
|
|
+ name: str
|
|
|
+ bio: Optional[str] = None
|
|
|
+ gender: Optional[str] = None
|
|
|
+ date_of_birth: Optional[datetime.date] = None
|
|
|
+
|
|
|
+
|
|
|
class UserListResponse(BaseModel):
|
|
|
users: list[UserModel]
|
|
|
total: int
|
|
@@ -349,7 +373,8 @@ class UsersTable:
|
|
|
user = db.query(User).filter_by(id=id).first()
|
|
|
return UserModel.model_validate(user)
|
|
|
# return UserModel(**user.dict())
|
|
|
- except Exception:
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
return None
|
|
|
|
|
|
def update_user_settings_by_id(self, id: str, updated: dict) -> Optional[UserModel]:
|