110 lines
3.7 KiB
Go
110 lines
3.7 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
|
|
"easygoadmin/api/v1"
|
|
"easygoadmin/internal/dao"
|
|
"easygoadmin/internal/service"
|
|
)
|
|
|
|
// ============================== 登录日志业务实现 ==============================
|
|
|
|
// sLoginLog 登录日志业务实现
|
|
// 实现 service.ILoginLog 接口,承载登录日志模块的业务逻辑
|
|
type sLoginLog struct{}
|
|
|
|
// loginLogSerializeMaps 枚举字段到字典编码的映射
|
|
// {field}Text 由 dict_item 解析,字典管理页可修改文案
|
|
var loginLogSerializeMaps = map[string]string{
|
|
"log_type": "login_log_log_type",
|
|
"source": "login_log_source",
|
|
"status": "login_log_status",
|
|
}
|
|
|
|
// loginLogSpec 登录日志模块声明
|
|
var loginLogSpec = ModuleSpec[v1.LoginLogItem, v1.LoginLogItem, v1.LoginLogDetailRes]{
|
|
Model: dao.LoginLog.Ctx,
|
|
LikeFields: []string{"username"},
|
|
EqFields: []string{"log_type", "status"},
|
|
OrderBy: "id DESC",
|
|
SerializeMaps: loginLogSerializeMaps,
|
|
}
|
|
|
|
func init() {
|
|
service.RegisterLoginLog(&sLoginLog{})
|
|
}
|
|
|
|
// Page 登录日志分页
|
|
// 按查询条件分页返回登录日志列表
|
|
func (s *sLoginLog) Page(ctx context.Context, req *v1.LoginLogPageReq) (res *v1.LoginLogPageRes, err error) {
|
|
list, total, err := loginLogSpec.Page(ctx, req, req.GetPageNo(), req.GetPageSize())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return v1.NewPageData(req.GetPageNo(), req.GetPageSize(), total, derefSlice(list)), nil
|
|
}
|
|
|
|
// List 登录日志全量列表
|
|
// 按关键词、类型、状态等条件返回登录日志列表
|
|
func (s *sLoginLog) List(ctx context.Context, req *v1.LoginLogListReq) (res v1.LoginLogListRes, err error) {
|
|
list, err := loginLogSpec.List(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return derefSlice(list), nil
|
|
}
|
|
|
|
// Detail 登录日志详情
|
|
// 按日志ID查询详情
|
|
func (s *sLoginLog) Detail(ctx context.Context, req *v1.LoginLogDetailReq) (res *v1.LoginLogDetailRes, err error) {
|
|
return loginLogSpec.Detail(ctx, req.Id, req)
|
|
}
|
|
|
|
// Delete 删除登录日志
|
|
// 按日志ID删除单条记录
|
|
func (s *sLoginLog) Delete(ctx context.Context, req *v1.LoginLogDeleteReq) (res *v1.LoginLogDeleteRes, err error) {
|
|
if err = loginLogSpec.Delete(ctx, req.Id); err != nil {
|
|
return nil, err
|
|
}
|
|
return &v1.LoginLogDeleteRes{}, nil
|
|
}
|
|
|
|
// BatchDelete 批量删除登录日志
|
|
// 按日志ID列表批量删除记录
|
|
func (s *sLoginLog) BatchDelete(ctx context.Context, req *v1.LoginLogBatchDeleteReq) (res *v1.LoginLogBatchDeleteRes, err error) {
|
|
if err = loginLogSpec.BatchDelete(ctx, req.Ids); err != nil {
|
|
return nil, err
|
|
}
|
|
return &v1.LoginLogBatchDeleteRes{}, nil
|
|
}
|
|
|
|
// toItem 数据库记录转换为登录日志行数据
|
|
// 枚举字段同步补全对应文本
|
|
func (s *sLoginLog) toItem(ctx context.Context, r gdb.Record) v1.LoginLogItem {
|
|
return v1.LoginLogItem{
|
|
Id: r["id"].Int64(),
|
|
Username: r["username"].String(),
|
|
LogType: r["log_type"].Int(),
|
|
LogTypeText: DictGetText(ctx, loginLogSerializeMaps["log_type"], r["log_type"].Int()),
|
|
Source: r["source"].Int(),
|
|
SourceText: DictGetText(ctx, loginLogSerializeMaps["source"], r["source"].Int()),
|
|
Method: r["method"].String(),
|
|
RequestMethod: r["request_method"].String(),
|
|
Url: r["url"].String(),
|
|
Param: r["param"].String(),
|
|
Result: r["result"].String(),
|
|
Ip: r["ip"].String(),
|
|
Location: r["location"].String(),
|
|
Os: r["os"].String(),
|
|
Browser: r["browser"].String(),
|
|
ConsumeTime: r["consume_time"].Int64(),
|
|
Status: r["status"].Int(),
|
|
StatusText: DictGetText(ctx, loginLogSerializeMaps["status"], r["status"].Int()),
|
|
Error: r["error"].String(),
|
|
CreateTime: r["create_time"].GTime(),
|
|
}
|
|
}
|