forked from iti-framework/iTi-Flask
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
from apiflask import APIBlueprint
|
|
from iti.applications.common.utils import page_schema, page, success
|
|
from iti.applications.models import SysLog, LogSchema
|
|
from .schemas.log import LogQuery, LogBatchDeleteRequest
|
|
from iti.applications.common import ModelFilter
|
|
from flask_jwt_extended import jwt_required
|
|
from iti.applications.extensions import db
|
|
from sqlalchemy import select, delete
|
|
from iti.applications.common import permission
|
|
|
|
bp = APIBlueprint("sys_log", __name__, url_prefix="/log", tag="系统.日志管理")
|
|
|
|
|
|
@bp.get("/page")
|
|
@jwt_required()
|
|
@permission("system:log:list")
|
|
@bp.input(LogQuery.Schema, location="query")
|
|
@bp.output(page_schema(LogSchema))
|
|
def page_log(query_data: LogQuery):
|
|
"""
|
|
分页查询日志
|
|
"""
|
|
|
|
query = select(SysLog).order_by(SysLog.created_at.desc())
|
|
if query_data.keyword:
|
|
kw = ModelFilter.escape_like(query_data.keyword)
|
|
query = query.filter(
|
|
SysLog.name.like(f"%{kw}%")
|
|
| SysLog.desc.like(f"%{kw}%")
|
|
| SysLog.path.like(f"%{kw}%")
|
|
| SysLog.ip.like(f"%{kw}%")
|
|
)
|
|
else:
|
|
if query_data.type:
|
|
query = query.filter(SysLog.type == query_data.type)
|
|
if query_data.createdAt and len(query_data.createdAt) >= 2:
|
|
query = query.filter(
|
|
SysLog.created_at.between(
|
|
query_data.createdAt[0], query_data.createdAt[1]
|
|
)
|
|
)
|
|
|
|
ret = db.paginate(query, page=query_data.page, per_page=query_data.size)
|
|
return page(ret)
|
|
|
|
|
|
@bp.delete("/<string:id>")
|
|
@jwt_required()
|
|
@permission("system:log:delete")
|
|
def delete_log(id: str):
|
|
"""
|
|
删除日志
|
|
"""
|
|
db.session.execute(delete(SysLog).filter_by(id=id))
|
|
db.session.commit()
|
|
return success()
|
|
|
|
|
|
@bp.delete("/batch")
|
|
@jwt_required()
|
|
@permission("system:log:delete")
|
|
@bp.input(LogBatchDeleteRequest.Schema, location="query")
|
|
def batch_delete_log(query_data: LogBatchDeleteRequest):
|
|
"""
|
|
批量删除日志
|
|
"""
|
|
delete_stmt = delete(SysLog)
|
|
conditions = []
|
|
if query_data.ids and len(query_data.ids) > 0:
|
|
conditions.append(SysLog.id.in_(query_data.ids))
|
|
if query_data.type:
|
|
conditions.append(SysLog.type == query_data.type)
|
|
if conditions:
|
|
delete_stmt = delete_stmt.where(*conditions)
|
|
db.session.execute(delete_stmt)
|
|
db.session.commit()
|
|
return success()
|