Files
mayfly-go/server/internal/sys/application/syslog.go

80 lines
2.0 KiB
Go
Raw Normal View History

package application
import (
"encoding/json"
"fmt"
"mayfly-go/internal/sys/domain/entity"
"mayfly-go/internal/sys/domain/repository"
"mayfly-go/pkg/contextx"
"mayfly-go/pkg/errorx"
"mayfly-go/pkg/model"
2023-01-14 16:29:52 +08:00
"mayfly-go/pkg/req"
"mayfly-go/pkg/utils/anyx"
"time"
)
type Syslog interface {
GetPageList(condition *entity.SysLogQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error)
// 从请求上下文的参数保存系统日志
2023-01-14 16:29:52 +08:00
SaveFromReq(req *req.Ctx)
}
2022-09-09 18:26:08 +08:00
func newSyslogApp(syslogRepo repository.Syslog) Syslog {
return &syslogAppImpl{
syslogRepo: syslogRepo,
}
}
2022-09-09 18:26:08 +08:00
type syslogAppImpl struct {
syslogRepo repository.Syslog
}
func (m *syslogAppImpl) GetPageList(condition *entity.SysLogQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error) {
return m.syslogRepo.GetPageList(condition, pageParam, toEntity, orderBy...)
}
2023-01-14 16:29:52 +08:00
func (m *syslogAppImpl) SaveFromReq(req *req.Ctx) {
lg := contextx.GetLoginAccount(req.MetaCtx)
if lg == nil {
2023-07-03 21:42:04 +08:00
lg = &model.LoginAccount{Id: 0, Username: "-"}
}
syslog := new(entity.SysLog)
syslog.CreateTime = time.Now()
syslog.Creator = lg.Username
syslog.CreatorId = lg.Id
syslog.Description = req.GetLogInfo().Description
if req.GetLogInfo().LogResp {
respB, _ := json.Marshal(req.ResData)
syslog.Resp = string(respB)
}
reqParam := req.ReqParam
if !anyx.IsBlank(reqParam) {
// 如果是字符串类型则不使用json序列化
if reqStr, ok := reqParam.(string); ok {
syslog.ReqParam = reqStr
} else {
reqB, _ := json.Marshal(reqParam)
syslog.ReqParam = string(reqB)
}
}
if err := req.Err; err != nil {
syslog.Type = entity.SyslogTypeError
var errMsg string
switch t := err.(type) {
case errorx.BizError:
errMsg = fmt.Sprintf("errCode: %d, errMsg: %s", t.Code(), t.Error())
case error:
errMsg = t.Error()
}
syslog.Resp = errMsg
} else {
syslog.Type = entity.SyslogTypeNorman
}
m.syslogRepo.Insert(req.MetaCtx, syslog)
}