diff --git a/internal/db/models/log_dao.go b/internal/db/models/log_dao.go index fad181d7..a6ac423e 100644 --- a/internal/db/models/log_dao.go +++ b/internal/db/models/log_dao.go @@ -1,9 +1,11 @@ package models import ( + "encoding/json" dbutils "github.com/TeaOSLab/EdgeAPI/internal/db/utils" "github.com/TeaOSLab/EdgeAPI/internal/errors" "github.com/TeaOSLab/EdgeAPI/internal/utils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" _ "github.com/go-sql-driver/mysql" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" @@ -36,7 +38,7 @@ func init() { } // CreateLog 创建管理员日志 -func (this *LogDAO) CreateLog(tx *dbs.Tx, adminType string, adminId int64, level string, description string, action string, ip string) error { +func (this *LogDAO) CreateLog(tx *dbs.Tx, adminType string, adminId int64, level string, description string, action string, ip string, langMessageCode langs.MessageCode, langMessageArgs []any) error { var op = NewLogOperator() op.Level = level op.Description = utils.LimitString(description, 1000) @@ -53,6 +55,16 @@ func (this *LogDAO) CreateLog(tx *dbs.Tx, adminType string, adminId int64, level op.ProviderId = adminId } + // i18n + op.LangMessageCode = langMessageCode + if len(langMessageArgs) > 0 { + langMessageArgsJSON, err := json.Marshal(langMessageArgs) + if err != nil { + return err + } + op.LangMesageArgs = langMessageArgsJSON + } + op.Day = timeutil.Format("Ymd") op.Type = LogTypeAdmin err := this.Save(tx, op) diff --git a/internal/db/models/log_model.go b/internal/db/models/log_model.go index d5545338..1d50f9b7 100644 --- a/internal/db/models/log_model.go +++ b/internal/db/models/log_model.go @@ -1,34 +1,60 @@ package models -// 操作日志 +import "github.com/iwind/TeaGo/dbs" + +const ( + LogFieldId dbs.FieldName = "id" // ID + LogFieldLevel dbs.FieldName = "level" // 级别 + LogFieldDescription dbs.FieldName = "description" // 描述 + LogFieldCreatedAt dbs.FieldName = "createdAt" // 创建时间 + LogFieldAction dbs.FieldName = "action" // 动作 + LogFieldUserId dbs.FieldName = "userId" // 用户ID + LogFieldAdminId dbs.FieldName = "adminId" // 管理员ID + LogFieldProviderId dbs.FieldName = "providerId" // 供应商ID + LogFieldIp dbs.FieldName = "ip" // IP地址 + LogFieldType dbs.FieldName = "type" // 类型:admin, user + LogFieldDay dbs.FieldName = "day" // 日期 + LogFieldBillId dbs.FieldName = "billId" // 账单ID + LogFieldLangMessageCode dbs.FieldName = "langMessageCode" // 多语言消息代号 + LogFieldLangMesageArgs dbs.FieldName = "langMesageArgs" // 多语言参数 + LogFieldParams dbs.FieldName = "params" // 关联对象参数 +) + +// Log 操作日志 type Log struct { - Id uint32 `field:"id"` // ID - Level string `field:"level"` // 级别 - Description string `field:"description"` // 描述 - CreatedAt uint64 `field:"createdAt"` // 创建时间 - Action string `field:"action"` // 动作 - UserId uint32 `field:"userId"` // 用户ID - AdminId uint32 `field:"adminId"` // 管理员ID - ProviderId uint32 `field:"providerId"` // 供应商ID - Ip string `field:"ip"` // IP地址 - Type string `field:"type"` // 类型:admin, user - Day string `field:"day"` // 日期 - BillId uint32 `field:"billId"` // 账单ID + Id uint32 `field:"id"` // ID + Level string `field:"level"` // 级别 + Description string `field:"description"` // 描述 + CreatedAt uint64 `field:"createdAt"` // 创建时间 + Action string `field:"action"` // 动作 + UserId uint32 `field:"userId"` // 用户ID + AdminId uint32 `field:"adminId"` // 管理员ID + ProviderId uint32 `field:"providerId"` // 供应商ID + Ip string `field:"ip"` // IP地址 + Type string `field:"type"` // 类型:admin, user + Day string `field:"day"` // 日期 + BillId uint32 `field:"billId"` // 账单ID + LangMessageCode string `field:"langMessageCode"` // 多语言消息代号 + LangMesageArgs dbs.JSON `field:"langMesageArgs"` // 多语言参数 + Params dbs.JSON `field:"params"` // 关联对象参数 } type LogOperator struct { - Id interface{} // ID - Level interface{} // 级别 - Description interface{} // 描述 - CreatedAt interface{} // 创建时间 - Action interface{} // 动作 - UserId interface{} // 用户ID - AdminId interface{} // 管理员ID - ProviderId interface{} // 供应商ID - Ip interface{} // IP地址 - Type interface{} // 类型:admin, user - Day interface{} // 日期 - BillId interface{} // 账单ID + Id any // ID + Level any // 级别 + Description any // 描述 + CreatedAt any // 创建时间 + Action any // 动作 + UserId any // 用户ID + AdminId any // 管理员ID + ProviderId any // 供应商ID + Ip any // IP地址 + Type any // 类型:admin, user + Day any // 日期 + BillId any // 账单ID + LangMessageCode any // 多语言消息代号 + LangMesageArgs any // 多语言参数 + Params any // 关联对象参数 } func NewLogOperator() *LogOperator { diff --git a/internal/rpc/services/service_log.go b/internal/rpc/services/service_log.go index 5df02ae0..e0b253c6 100644 --- a/internal/rpc/services/service_log.go +++ b/internal/rpc/services/service_log.go @@ -2,8 +2,10 @@ package services import ( "context" + "encoding/json" "github.com/TeaOSLab/EdgeAPI/internal/db/models" rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" ) @@ -22,7 +24,16 @@ func (this *LogService) CreateLog(ctx context.Context, req *pb.CreateLogRequest) var tx = this.NullTx() - err = models.SharedLogDAO.CreateLog(tx, userType, userId, req.Level, req.Description, req.Action, req.Ip) + // i18n + var langMessageArgs = []any{} + if len(req.LangMessagesArgsJSON) > 0 { + err = json.Unmarshal(req.LangMessagesArgsJSON, &langMessageArgs) + if err != nil { + return nil, err + } + } + + err = models.SharedLogDAO.CreateLog(tx, userType, userId, req.Level, req.Description, req.Action, req.Ip, langs.MessageCode(req.LangMessageCode), langMessageArgs) if err != nil { return nil, err }