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