103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
|
package handler
|
||
|
|
||
|
import (
|
||
|
"github.com/loveuer/nf"
|
||
|
"github.com/loveuer/nf/nft/resp"
|
||
|
"github.com/loveuer/nfflow/internal/database"
|
||
|
"github.com/loveuer/nfflow/internal/model"
|
||
|
"github.com/loveuer/nfflow/internal/opt"
|
||
|
"github.com/loveuer/nfflow/internal/sqlType"
|
||
|
"github.com/loveuer/nfflow/internal/util"
|
||
|
"github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
func LogCategories() nf.HandlerFunc {
|
||
|
return func(c *nf.Ctx) error {
|
||
|
return resp.Resp200(c, model.OpLogType(0).All())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func LogList(c *nf.Ctx) error {
|
||
|
type Req struct {
|
||
|
Page int `query:"page"`
|
||
|
Size int `query:"size"`
|
||
|
UserIds []uint64 `query:"user_ids"`
|
||
|
Types sqlType.NumSlice[model.OpLogType] `query:"types"`
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
ok bool
|
||
|
op *model.User
|
||
|
err error
|
||
|
req = new(Req)
|
||
|
list = make([]*model.OpLog, 0)
|
||
|
total int
|
||
|
)
|
||
|
|
||
|
if op, ok = c.Locals("user").(*model.User); !ok {
|
||
|
return resp.Resp401(c, nil)
|
||
|
}
|
||
|
|
||
|
if err = c.QueryParser(req); err != nil {
|
||
|
return resp.Resp400(c, err.Error())
|
||
|
}
|
||
|
|
||
|
if req.Size <= 0 {
|
||
|
req.Size = opt.DefaultSize
|
||
|
}
|
||
|
|
||
|
if req.Size > opt.MaxSize {
|
||
|
return resp.Resp400(c, req, "参数过大")
|
||
|
}
|
||
|
|
||
|
txCount := op.Role.Where(database.DB.Session(util.Timeout(3)).
|
||
|
Model(&model.OpLog{}).
|
||
|
Select("COUNT(`op_logs`.`id`)").
|
||
|
Joins("LEFT JOIN users ON `users`.`id` = `op_logs`.`user_id`"))
|
||
|
txGet := op.Role.Where(database.DB.Session(util.Timeout(10)).
|
||
|
Model(&model.OpLog{}).
|
||
|
Joins("LEFT JOIN users ON `users`.`id` = `op_logs`.`user_id`"))
|
||
|
|
||
|
if len(req.UserIds) != 0 {
|
||
|
txCount = txCount.Where("op_logs.user_id IN ?", req.UserIds)
|
||
|
txGet = txGet.Where("op_logs.user_id IN ?", req.UserIds)
|
||
|
}
|
||
|
|
||
|
if len(req.Types) != 0 {
|
||
|
txCount = txCount.Where("op_logs.type IN ?", req.Types)
|
||
|
txGet = txGet.Where("op_logs.type IN ?", req.Types)
|
||
|
}
|
||
|
|
||
|
if err = txCount.
|
||
|
Find(&total).
|
||
|
Error; err != nil {
|
||
|
return resp.Resp500(c, err.Error())
|
||
|
}
|
||
|
|
||
|
if err = txGet.
|
||
|
Offset(req.Page * req.Size).
|
||
|
Limit(req.Size).
|
||
|
Order("`op_logs`.`created_at` DESC").
|
||
|
Find(&list).
|
||
|
Error; err != nil {
|
||
|
return resp.Resp500(c, err.Error())
|
||
|
}
|
||
|
|
||
|
for _, log := range list {
|
||
|
m := make(map[string]any)
|
||
|
if err = log.Content.Bind(&m); err != nil {
|
||
|
logrus.Warnf("handler.LogList: log=%d content=%v bind map[string]any err=%v", log.Id, log.Content, err)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if log.HTML, err = log.Type.Render(m); err != nil {
|
||
|
logrus.Warnf("handler.LogList: log=%d template=%s render map=%+v err=%v", log.Id, log.Type.Template(), m, err)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
logrus.Tracef("handler.LogList: log=%d render map=%+v string=%s", log.Id, m, log.HTML)
|
||
|
}
|
||
|
|
||
|
return resp.Resp200(c, nf.Map{"list": list, "total": total})
|
||
|
}
|