Files
dromara--domain-admin/domain_admin/service/operation_service.py
T
2026-07-13 12:31:34 +08:00

101 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
"""
@File : operation_service.py
@Date : 2023-07-04
"""
from __future__ import print_function, unicode_literals, absolute_import, division
from functools import wraps
from flask import g, request
from domain_admin.enums.operation_enum import OperationEnum
from domain_admin.model.log_operation_model import LogOperationModel
from domain_admin.utils import json_util
def add_operation_log(user_id, table, type_id, before, after):
"""
添加操作日志
table = model._meta.table_name
:param type_id: int
:param after: str
:param user_id: int
:param table: Dict
:param before: Dict
:return:
"""
LogOperationModel.create(
user_id=user_id,
table=table,
type_id=type_id,
before=json_util.json_encode(before),
after=json_util.json_encode(after)
)
def operation_log_decorator(
model,
operation_type_id,
primary_key = 'id'
):
"""
用于添加操作日志装饰器
:param primary_key: str 主键id key
:param model: BaseModel
:param operation_type_id: int 操作类型id
:return:
"""
def outer_wrapper(func):
@wraps(func)
def wrapper(*args, **kwargs):
before = None
after = None
# before
if OperationEnum.CREATE == operation_type_id:
before = None
elif OperationEnum.UPDATE == operation_type_id:
before = model.get_by_id(request.json[primary_key])
elif OperationEnum.DELETE == operation_type_id:
before = model.get_by_id(request.json[primary_key])
elif OperationEnum.BATCH_DELETE == operation_type_id:
before = list(model.select().where(
model.id.in_(request.json[primary_key])
))
# execute
ret = func(*args, **kwargs)
# after
if OperationEnum.CREATE == operation_type_id:
after = model.get_by_id(ret[primary_key])
if OperationEnum.UPDATE == operation_type_id:
after = model.get_by_id(request.json[primary_key])
if OperationEnum.DELETE == operation_type_id:
after = None
current_user_id = g.user_id
# 写入log
add_operation_log(
user_id=current_user_id,
table=model._meta.table_name,
type_id=operation_type_id,
before=before,
after=after
)
return ret
return wrapper
return outer_wrapper