feat: store discord user ids on accounts
This commit is contained in:
@@ -30,6 +30,7 @@ def _user_response(user: models.User) -> dict:
|
||||
"role_id": user.role_id,
|
||||
"role_name": user.role_name,
|
||||
"agent_id": user.agent.agent_id if user.agent else None,
|
||||
"discord_user_id": user.discord_user_id,
|
||||
"created_at": user.created_at,
|
||||
}
|
||||
return data
|
||||
@@ -114,6 +115,7 @@ def create_user(
|
||||
username=user.username,
|
||||
email=user.email,
|
||||
full_name=user.full_name,
|
||||
discord_user_id=user.discord_user_id,
|
||||
hashed_password=hashed_password,
|
||||
is_admin=False,
|
||||
is_active=True,
|
||||
@@ -202,6 +204,9 @@ def update_user(
|
||||
raise HTTPException(status_code=400, detail="You cannot deactivate your own account")
|
||||
user.is_active = payload.is_active
|
||||
|
||||
if payload.discord_user_id is not None:
|
||||
user.discord_user_id = payload.discord_user_id or None
|
||||
|
||||
db.commit()
|
||||
db.refresh(user)
|
||||
return _user_response(user)
|
||||
|
||||
@@ -271,6 +271,9 @@ def _migrate_schema():
|
||||
db.execute(text("ALTER TABLE users ADD COLUMN role_id INTEGER NULL"))
|
||||
_ensure_fk(db, "users", "role_id", "roles", "id", "fk_users_role_id")
|
||||
|
||||
if _has_table(db, "users") and not _has_column(db, "users", "discord_user_id"):
|
||||
db.execute(text("ALTER TABLE users ADD COLUMN discord_user_id VARCHAR(32) NULL"))
|
||||
|
||||
# --- monitored_servers.api_key for heartbeat v2 ---
|
||||
if _has_table(db, "monitored_servers") and not _has_column(db, "monitored_servers", "api_key"):
|
||||
db.execute(text("ALTER TABLE monitored_servers ADD COLUMN api_key VARCHAR(64) NULL"))
|
||||
|
||||
@@ -72,6 +72,7 @@ class User(Base):
|
||||
email = Column(String(100), unique=True, nullable=False)
|
||||
hashed_password = Column(String(255), nullable=True)
|
||||
full_name = Column(String(100), nullable=True)
|
||||
discord_user_id = Column(String(32), nullable=True)
|
||||
is_active = Column(Boolean, default=True)
|
||||
is_admin = Column(Boolean, default=False)
|
||||
role_id = Column(Integer, ForeignKey("roles.id"), nullable=True)
|
||||
|
||||
@@ -171,6 +171,7 @@ class UserBase(BaseModel):
|
||||
class UserCreate(UserBase):
|
||||
password: Optional[str] = None
|
||||
role_id: Optional[int] = None
|
||||
discord_user_id: Optional[str] = None
|
||||
# Agent binding (both must be provided or both omitted)
|
||||
agent_id: Optional[str] = None
|
||||
claw_identifier: Optional[str] = None
|
||||
@@ -182,6 +183,7 @@ class UserUpdate(BaseModel):
|
||||
password: Optional[str] = None
|
||||
role_id: Optional[int] = None
|
||||
is_active: Optional[bool] = None
|
||||
discord_user_id: Optional[str] = None
|
||||
|
||||
|
||||
class UserResponse(UserBase):
|
||||
@@ -191,6 +193,7 @@ class UserResponse(UserBase):
|
||||
role_id: Optional[int] = None
|
||||
role_name: Optional[str] = None
|
||||
agent_id: Optional[str] = None
|
||||
discord_user_id: Optional[str] = None
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
|
||||
Reference in New Issue
Block a user