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

View File

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

View File

@ -51,6 +51,8 @@ GROUP_PATTERN = r'.*?Message (-?\d*) from (\d*)@\[群:(\d*)] "(.*)"'
PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"' PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"'
AT_PATTERN = r'\[CQ:at,qq=(.*)\]'
IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]' IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]'
@router.get("/get_group_list", dependencies=[authentication()], description="获取群组列表") @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) msg = r.group(4)
if gid not in ID2NAME: if gid not in ID2NAME:
user = await GroupInfoUser.filter(user_id=uid, group_id=gid).first() 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: if msg_id in MSG_LIST:
return return
MSG_LIST.append(msg_id) MSG_LIST.append(msg_id)
@ -423,7 +430,7 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]):
user_id=uid, user_id=uid,
group_id=gid, group_id=gid,
message=messages, message=messages,
name=ID2NAME[uid], name=ID2NAME.get(uid) or "",
ava_url=AVA_URL.format(uid), ava_url=AVA_URL.format(uid),
) )

View File

@ -74,6 +74,17 @@ class QueryModel(BaseModel, Generic[T]):
if size < 1: if size < 1:
raise ValueError("每页数量小于1...") raise ValueError("每页数量小于1...")
return size return size
class BaseResultModel(BaseModel):
"""
基础返回
"""
total: int
"""总页数"""
data: Any
"""数据"""
class PluginConfig(BaseModel): class PluginConfig(BaseModel):
@ -89,26 +100,6 @@ class PluginConfig(BaseModel):
has_type: bool 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): class SystemStatus(BaseModel):
""" """