同步历史版本代码
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package logmessage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type (
|
||||
Model interface {
|
||||
logMessageModel
|
||||
customLogMessageModel
|
||||
}
|
||||
logMessageModel interface {
|
||||
Insert(ctx context.Context, data *LogMessage) error
|
||||
FindOne(ctx context.Context, id int64) (*LogMessage, error)
|
||||
Update(ctx context.Context, data *LogMessage) error
|
||||
Delete(ctx context.Context, id int64) error
|
||||
}
|
||||
customModel struct{
|
||||
*defaultModel
|
||||
}
|
||||
defaultModel struct{
|
||||
*gorm.DB
|
||||
}
|
||||
)
|
||||
|
||||
func newDefaultModel(db *gorm.DB) *defaultModel {
|
||||
return &defaultModel{DB: db}
|
||||
}
|
||||
|
||||
func (m *defaultModel) Insert(ctx context.Context, data *LogMessage) error {
|
||||
return m.WithContext(ctx).Create(data).Error
|
||||
}
|
||||
|
||||
func (m *defaultModel) FindOne(ctx context.Context, id int64) (*LogMessage, error) {
|
||||
var v LogMessage
|
||||
err := m.WithContext(ctx).Where("id = ?", id).First(&v).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v, nil
|
||||
}
|
||||
|
||||
func (m *defaultModel) Update(ctx context.Context, data *LogMessage) error {
|
||||
return m.WithContext(ctx).Where("`id` = ?", data.Id).Save(data).Error
|
||||
}
|
||||
|
||||
func (m *defaultModel) Delete(ctx context.Context, id int64) error {
|
||||
return m.WithContext(ctx).Where("`id` = ?", id).Delete(&LogMessage{}).Error
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package logmessage
|
||||
|
||||
import "time"
|
||||
|
||||
type LogMessage struct {
|
||||
Id int64 `gorm:"primaryKey;AUTO_INCREMENT"`
|
||||
Platform string `gorm:"type:varchar(32);not null"`
|
||||
AppVersion string `gorm:"type:varchar(32);default:null"`
|
||||
OsName string `gorm:"type:varchar(32);default:null"`
|
||||
OsVersion string `gorm:"type:varchar(32);default:null"`
|
||||
DeviceId string `gorm:"type:varchar(64);default:null"`
|
||||
UserId *int64 `gorm:"type:bigint;default:null"`
|
||||
SessionId string `gorm:"type:varchar(64);default:null"`
|
||||
Level uint8 `gorm:"type:tinyint(1);not null;default:3"`
|
||||
ErrorCode string `gorm:"type:varchar(64);default:null"`
|
||||
Message string `gorm:"type:text;not null"`
|
||||
Stack string `gorm:"type:mediumtext;default:null"`
|
||||
Context string `gorm:"type:json;default:null"`
|
||||
ClientIP string `gorm:"type:varchar(45);default:null"`
|
||||
UserAgent string `gorm:"type:varchar(255);default:null"`
|
||||
Locale string `gorm:"type:varchar(16);default:null"`
|
||||
Digest string `gorm:"type:varchar(64);uniqueIndex:uniq_digest;default:null"`
|
||||
OccurredAt *time.Time `gorm:"type:datetime;default:null"`
|
||||
CreatedAt time.Time `gorm:"<-:create;comment:Create Time"`
|
||||
}
|
||||
|
||||
func (LogMessage) TableName() string { return "log_message" }
|
||||
@@ -0,0 +1,52 @@
|
||||
package logmessage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func NewModel(db *gorm.DB) Model {
|
||||
return &customModel{ defaultModel: newDefaultModel(db) }
|
||||
}
|
||||
|
||||
type FilterParams struct {
|
||||
Page int
|
||||
Size int
|
||||
Platform string
|
||||
Level uint8
|
||||
UserID int64
|
||||
DeviceID string
|
||||
ErrorCode string
|
||||
Keyword string
|
||||
Start time.Time
|
||||
End time.Time
|
||||
}
|
||||
|
||||
type customLogMessageModel interface {
|
||||
Filter(ctx context.Context, filter *FilterParams) ([]*LogMessage, int64, error)
|
||||
}
|
||||
|
||||
func (m *customModel) Filter(ctx context.Context, filter *FilterParams) ([]*LogMessage, int64, error) {
|
||||
tx := m.WithContext(ctx).Model(&LogMessage{}).Order("id DESC")
|
||||
if filter == nil {
|
||||
filter = &FilterParams{ Page: 1, Size: 10 }
|
||||
}
|
||||
if filter.Page < 1 { filter.Page = 1 }
|
||||
if filter.Size < 1 { filter.Size = 10 }
|
||||
if filter.Platform != "" { tx = tx.Where("`platform` = ?", filter.Platform) }
|
||||
if filter.Level != 0 { tx = tx.Where("`level` = ?", filter.Level) }
|
||||
if filter.UserID != 0 { tx = tx.Where("`user_id` = ?", filter.UserID) }
|
||||
if filter.DeviceID != "" { tx = tx.Where("`device_id` = ?", filter.DeviceID) }
|
||||
if filter.ErrorCode != "" { tx = tx.Where("`error_code` = ?", filter.ErrorCode) }
|
||||
if !filter.Start.IsZero() { tx = tx.Where("`created_at` >= ?", filter.Start) }
|
||||
if !filter.End.IsZero() { tx = tx.Where("`created_at` <= ?", filter.End) }
|
||||
if filter.Keyword != "" {
|
||||
like := "%" + filter.Keyword + "%"
|
||||
tx = tx.Where("`message` LIKE ? OR `stack` LIKE ?", like, like)
|
||||
}
|
||||
var total int64
|
||||
var rows []*LogMessage
|
||||
err := tx.Count(&total).Limit(filter.Size).Offset((filter.Page-1)*filter.Size).Find(&rows).Error
|
||||
return rows, total, err
|
||||
}
|
||||
Reference in New Issue
Block a user