116 lines
4.7 KiB
Python
116 lines
4.7 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import UniqueConstraint
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
|
|
class SysRole(SQLModel, table=True):
|
|
__tablename__ = "sys_role"
|
|
__table_args__ = (
|
|
UniqueConstraint("role_key", name="uq_sys_role_role_key"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
role_key: str = Field(index=True, max_length=64)
|
|
name: str = Field(default="", max_length=120)
|
|
description: str = Field(default="")
|
|
is_active: bool = Field(default=True, index=True)
|
|
sort_order: int = Field(default=100, index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
|
|
|
|
|
|
class SysUser(SQLModel, table=True):
|
|
__tablename__ = "sys_user"
|
|
__table_args__ = (
|
|
UniqueConstraint("username", name="uq_sys_user_username"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
username: str = Field(index=True, max_length=64)
|
|
display_name: str = Field(default="", max_length=120)
|
|
password_hash: str = Field(default="", max_length=255)
|
|
password_salt: str = Field(default="", max_length=64)
|
|
role_id: Optional[int] = Field(default=None, foreign_key="sys_role.id", index=True)
|
|
is_active: bool = Field(default=True, index=True)
|
|
last_login_at: Optional[datetime] = Field(default=None, index=True)
|
|
current_token_hash: Optional[str] = Field(default=None, index=True, max_length=255)
|
|
current_token_expires_at: Optional[datetime] = Field(default=None, index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
|
|
|
|
|
|
class SysMenu(SQLModel, table=True):
|
|
__tablename__ = "sys_menu"
|
|
__table_args__ = (
|
|
UniqueConstraint("menu_key", name="uq_sys_menu_menu_key"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
menu_key: str = Field(index=True, max_length=64)
|
|
parent_key: str = Field(default="", index=True, max_length=64)
|
|
title: str = Field(default="", max_length=120)
|
|
title_en: str = Field(default="", max_length=120)
|
|
menu_type: str = Field(default="item", max_length=32, index=True)
|
|
route_path: str = Field(default="", max_length=255)
|
|
icon: str = Field(default="", max_length=64)
|
|
permission_key: str = Field(default="", max_length=120)
|
|
visible: bool = Field(default=True, index=True)
|
|
sort_order: int = Field(default=100, index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
|
|
|
|
|
|
class SysPermission(SQLModel, table=True):
|
|
__tablename__ = "sys_permission"
|
|
__table_args__ = (
|
|
UniqueConstraint("permission_key", name="uq_sys_permission_permission_key"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
permission_key: str = Field(index=True, max_length=120)
|
|
name: str = Field(default="", max_length=120)
|
|
menu_key: str = Field(default="", index=True, max_length=64)
|
|
action: str = Field(default="view", max_length=32, index=True)
|
|
description: str = Field(default="")
|
|
sort_order: int = Field(default=100, index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
|
|
|
|
|
|
class SysRoleMenu(SQLModel, table=True):
|
|
__tablename__ = "sys_role_menu"
|
|
__table_args__ = (
|
|
UniqueConstraint("role_id", "menu_id", name="uq_sys_role_menu_role_menu"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
role_id: int = Field(foreign_key="sys_role.id", index=True)
|
|
menu_id: int = Field(foreign_key="sys_menu.id", index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
|
|
|
|
class SysRolePermission(SQLModel, table=True):
|
|
__tablename__ = "sys_role_permission"
|
|
__table_args__ = (
|
|
UniqueConstraint("role_id", "permission_id", name="uq_sys_role_permission_role_permission"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
role_id: int = Field(foreign_key="sys_role.id", index=True)
|
|
permission_id: int = Field(foreign_key="sys_permission.id", index=True)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
|
|
|
|
class SysUserBot(SQLModel, table=True):
|
|
__tablename__ = "sys_user_bot"
|
|
__table_args__ = (
|
|
UniqueConstraint("user_id", "bot_id", name="uq_sys_user_bot_user_bot"),
|
|
)
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
user_id: int = Field(foreign_key="sys_user.id", index=True)
|
|
bot_id: str = Field(foreign_key="bot_instance.id", index=True, max_length=120)
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|