perf👌: webui完善数据库管理api

This commit is contained in:
HibiKier 2024-01-14 17:48:15 +08:00
parent 59cb2bee8b
commit 45acf4a094
4 changed files with 31 additions and 26 deletions

View File

@ -11,7 +11,7 @@ from configs.config import NICKNAME
from services.db_context import TestSQL
from utils.utils import get_matchers
from ....base_model import QueryModel, Result
from ....base_model import BaseResultModel, QueryModel, Result
from ....config import QueryDateType
from ....utils import authentication
from .models.model import SqlModel, SqlText
@ -77,6 +77,7 @@ async def _(sql: SqlText, request: Request) -> Result:
if sql.sql.lower().startswith("select"):
db = Tortoise.get_connection("default")
res = await db.execute_query_dict(sql.sql)
await SqlLog.add(ip or "0.0.0.0", sql.sql, "")
return Result.ok(res, "执行成功啦!")
else:
result = await TestSQL.raw(sql.sql)
@ -89,11 +90,14 @@ async def _(sql: SqlText, request: Request) -> Result:
@router.post("/get_sql_log", dependencies=[authentication()], description="sql日志列表")
async def _(query: QueryModel) -> Result:
data = await SqlLog.all().offset((query.index - 1) * query.size).limit(query.size)
return Result.ok(data)
total = await SqlLog.all().count()
if (total % query.size):
total += 1
data = await SqlLog.all().order_by("-id").offset((query.index - 1) * query.size).limit(query.size)
return Result.ok(BaseResultModel(total=total, data=data))
@router.get("/get_sql", dependencies=[authentication()], description="常用sql")
@router.get("/get_common_sql", dependencies=[authentication()], description="常用sql")
async def _(plugin_name: Optional[str] = None) -> Result:
if plugin_name:
return Result.ok(SQL_DICT.get(plugin_name))

View File

@ -14,6 +14,9 @@ class SqlText(BaseModel):
class SqlModel(BaseModel):
"""
常用sql
"""
name: str
"""插件中文名称"""

View File

@ -51,6 +51,8 @@ GROUP_PATTERN = r'.*?Message (-?\d*) from (\d*)@\[群:(\d*)] "(.*)"'
PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"'
AT_PATTERN = r'\[CQ:at,qq=(.*)\]'
IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]'
@router.get("/get_group_list", dependencies=[authentication()], description="获取群组列表")
@ -405,7 +407,12 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]):
msg = r.group(4)
if gid not in ID2NAME:
user = await GroupInfoUser.filter(user_id=uid, group_id=gid).first()
ID2NAME[gid] = user.user_name or user.nickname
ID2NAME[uid] = user.user_name or user.nickname
if at_list := re.findall(AT_PATTERN, msg):
user_list = await GroupInfoUser.filter(user_id__in=at_list, group_id=gid).all()
id2name = {u.user_id: (u.user_name or u.nickname) for u in user_list}
for qq in at_list:
msg = re.sub(rf'\[CQ:at,qq={qq}\]', f"@{id2name[qq] or ''}", msg)
if msg_id in MSG_LIST:
return
MSG_LIST.append(msg_id)
@ -423,7 +430,7 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]):
user_id=uid,
group_id=gid,
message=messages,
name=ID2NAME[uid],
name=ID2NAME.get(uid) or "",
ava_url=AVA_URL.format(uid),
)

View File

@ -74,6 +74,17 @@ class QueryModel(BaseModel, Generic[T]):
if size < 1:
raise ValueError("每页数量小于1...")
return size
class BaseResultModel(BaseModel):
"""
基础返回
"""
total: int
"""总页数"""
data: Any
"""数据"""
class PluginConfig(BaseModel):
@ -89,26 +100,6 @@ class PluginConfig(BaseModel):
has_type: bool
class Plugin(BaseModel):
"""
插件
"""
model: str
"""模块名称"""
plugin_settings: Optional[PluginSetting]
"""settings"""
plugin_manager: Optional[PluginManager]
"""manager"""
plugin_config: Optional[Dict[str, PluginConfig]]
"""配置项"""
cd_limit: Optional[PluginCd]
"""cd限制"""
block_limit: Optional[PluginBlock]
"""阻断限制"""
count_limit: Optional[PluginCount]
"""次数限制"""
class SystemStatus(BaseModel):
"""