feat: add audit logs and system configs

This commit is contained in:
2026-01-15 20:07:36 +08:00
parent 914df9edf2
commit b3fc226bbe
25 changed files with 3325 additions and 108 deletions

View File

@@ -0,0 +1,481 @@
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
package models
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"go.ipao.vip/gen"
"go.ipao.vip/gen/field"
"gorm.io/plugin/dbresolver"
)
func newSystemConfig(db *gorm.DB, opts ...gen.DOOption) systemConfigQuery {
_systemConfigQuery := systemConfigQuery{}
_systemConfigQuery.systemConfigQueryDo.UseDB(db, opts...)
_systemConfigQuery.systemConfigQueryDo.UseModel(&SystemConfig{})
tableName := _systemConfigQuery.systemConfigQueryDo.TableName()
_systemConfigQuery.ALL = field.NewAsterisk(tableName)
_systemConfigQuery.ID = field.NewInt64(tableName, "id")
_systemConfigQuery.ConfigKey = field.NewString(tableName, "config_key")
_systemConfigQuery.Value = field.NewJSONB(tableName, "value")
_systemConfigQuery.Description = field.NewString(tableName, "description")
_systemConfigQuery.CreatedAt = field.NewTime(tableName, "created_at")
_systemConfigQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
_systemConfigQuery.fillFieldMap()
return _systemConfigQuery
}
type systemConfigQuery struct {
systemConfigQueryDo systemConfigQueryDo
ALL field.Asterisk
ID field.Int64 // 主键ID。
ConfigKey field.String // 配置项Key用途按Key读取/更新;约束:唯一。
Value field.JSONB // 配置值JSON用途存储任意结构化配置默认 {}。
Description field.String // 配置说明;用途:给运营/技术理解用途。
CreatedAt field.Time // 创建时间;用途:审计与追溯。
UpdatedAt field.Time // 更新时间;用途:变更记录。
fieldMap map[string]field.Expr
}
func (s systemConfigQuery) Table(newTableName string) *systemConfigQuery {
s.systemConfigQueryDo.UseTable(newTableName)
return s.updateTableName(newTableName)
}
func (s systemConfigQuery) As(alias string) *systemConfigQuery {
s.systemConfigQueryDo.DO = *(s.systemConfigQueryDo.As(alias).(*gen.DO))
return s.updateTableName(alias)
}
func (s *systemConfigQuery) updateTableName(table string) *systemConfigQuery {
s.ALL = field.NewAsterisk(table)
s.ID = field.NewInt64(table, "id")
s.ConfigKey = field.NewString(table, "config_key")
s.Value = field.NewJSONB(table, "value")
s.Description = field.NewString(table, "description")
s.CreatedAt = field.NewTime(table, "created_at")
s.UpdatedAt = field.NewTime(table, "updated_at")
s.fillFieldMap()
return s
}
func (s *systemConfigQuery) QueryContext(ctx context.Context) (*systemConfigQuery, *systemConfigQueryDo) {
return s, s.systemConfigQueryDo.WithContext(ctx)
}
func (s *systemConfigQuery) WithContext(ctx context.Context) *systemConfigQueryDo {
return s.systemConfigQueryDo.WithContext(ctx)
}
func (s systemConfigQuery) TableName() string { return s.systemConfigQueryDo.TableName() }
func (s systemConfigQuery) Alias() string { return s.systemConfigQueryDo.Alias() }
func (s systemConfigQuery) Columns(cols ...field.Expr) gen.Columns {
return s.systemConfigQueryDo.Columns(cols...)
}
func (s *systemConfigQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := s.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (s *systemConfigQuery) fillFieldMap() {
s.fieldMap = make(map[string]field.Expr, 6)
s.fieldMap["id"] = s.ID
s.fieldMap["config_key"] = s.ConfigKey
s.fieldMap["value"] = s.Value
s.fieldMap["description"] = s.Description
s.fieldMap["created_at"] = s.CreatedAt
s.fieldMap["updated_at"] = s.UpdatedAt
}
func (s systemConfigQuery) clone(db *gorm.DB) systemConfigQuery {
s.systemConfigQueryDo.ReplaceConnPool(db.Statement.ConnPool)
return s
}
func (s systemConfigQuery) replaceDB(db *gorm.DB) systemConfigQuery {
s.systemConfigQueryDo.ReplaceDB(db)
return s
}
type systemConfigQueryDo struct{ gen.DO }
func (s systemConfigQueryDo) Debug() *systemConfigQueryDo {
return s.withDO(s.DO.Debug())
}
func (s systemConfigQueryDo) WithContext(ctx context.Context) *systemConfigQueryDo {
return s.withDO(s.DO.WithContext(ctx))
}
func (s systemConfigQueryDo) ReadDB() *systemConfigQueryDo {
return s.Clauses(dbresolver.Read)
}
func (s systemConfigQueryDo) WriteDB() *systemConfigQueryDo {
return s.Clauses(dbresolver.Write)
}
func (s systemConfigQueryDo) Session(config *gorm.Session) *systemConfigQueryDo {
return s.withDO(s.DO.Session(config))
}
func (s systemConfigQueryDo) Clauses(conds ...clause.Expression) *systemConfigQueryDo {
return s.withDO(s.DO.Clauses(conds...))
}
func (s systemConfigQueryDo) Returning(value interface{}, columns ...string) *systemConfigQueryDo {
return s.withDO(s.DO.Returning(value, columns...))
}
func (s systemConfigQueryDo) Not(conds ...gen.Condition) *systemConfigQueryDo {
return s.withDO(s.DO.Not(conds...))
}
func (s systemConfigQueryDo) Or(conds ...gen.Condition) *systemConfigQueryDo {
return s.withDO(s.DO.Or(conds...))
}
func (s systemConfigQueryDo) Select(conds ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Select(conds...))
}
func (s systemConfigQueryDo) Where(conds ...gen.Condition) *systemConfigQueryDo {
return s.withDO(s.DO.Where(conds...))
}
func (s systemConfigQueryDo) Order(conds ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Order(conds...))
}
func (s systemConfigQueryDo) Distinct(cols ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Distinct(cols...))
}
func (s systemConfigQueryDo) Omit(cols ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Omit(cols...))
}
func (s systemConfigQueryDo) Join(table schema.Tabler, on ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Join(table, on...))
}
func (s systemConfigQueryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.LeftJoin(table, on...))
}
func (s systemConfigQueryDo) RightJoin(table schema.Tabler, on ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.RightJoin(table, on...))
}
func (s systemConfigQueryDo) Group(cols ...field.Expr) *systemConfigQueryDo {
return s.withDO(s.DO.Group(cols...))
}
func (s systemConfigQueryDo) Having(conds ...gen.Condition) *systemConfigQueryDo {
return s.withDO(s.DO.Having(conds...))
}
func (s systemConfigQueryDo) Limit(limit int) *systemConfigQueryDo {
return s.withDO(s.DO.Limit(limit))
}
func (s systemConfigQueryDo) Offset(offset int) *systemConfigQueryDo {
return s.withDO(s.DO.Offset(offset))
}
func (s systemConfigQueryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *systemConfigQueryDo {
return s.withDO(s.DO.Scopes(funcs...))
}
func (s systemConfigQueryDo) Unscoped() *systemConfigQueryDo {
return s.withDO(s.DO.Unscoped())
}
func (s systemConfigQueryDo) Create(values ...*SystemConfig) error {
if len(values) == 0 {
return nil
}
return s.DO.Create(values)
}
func (s systemConfigQueryDo) CreateInBatches(values []*SystemConfig, batchSize int) error {
return s.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (s systemConfigQueryDo) Save(values ...*SystemConfig) error {
if len(values) == 0 {
return nil
}
return s.DO.Save(values)
}
func (s systemConfigQueryDo) First() (*SystemConfig, error) {
if result, err := s.DO.First(); err != nil {
return nil, err
} else {
return result.(*SystemConfig), nil
}
}
func (s systemConfigQueryDo) Take() (*SystemConfig, error) {
if result, err := s.DO.Take(); err != nil {
return nil, err
} else {
return result.(*SystemConfig), nil
}
}
func (s systemConfigQueryDo) Last() (*SystemConfig, error) {
if result, err := s.DO.Last(); err != nil {
return nil, err
} else {
return result.(*SystemConfig), nil
}
}
func (s systemConfigQueryDo) Find() ([]*SystemConfig, error) {
result, err := s.DO.Find()
return result.([]*SystemConfig), err
}
func (s systemConfigQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*SystemConfig, err error) {
buf := make([]*SystemConfig, 0, batchSize)
err = s.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (s systemConfigQueryDo) FindInBatches(result *[]*SystemConfig, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return s.DO.FindInBatches(result, batchSize, fc)
}
func (s systemConfigQueryDo) Attrs(attrs ...field.AssignExpr) *systemConfigQueryDo {
return s.withDO(s.DO.Attrs(attrs...))
}
func (s systemConfigQueryDo) Assign(attrs ...field.AssignExpr) *systemConfigQueryDo {
return s.withDO(s.DO.Assign(attrs...))
}
func (s systemConfigQueryDo) Joins(fields ...field.RelationField) *systemConfigQueryDo {
for _, _f := range fields {
s = *s.withDO(s.DO.Joins(_f))
}
return &s
}
func (s systemConfigQueryDo) Preload(fields ...field.RelationField) *systemConfigQueryDo {
for _, _f := range fields {
s = *s.withDO(s.DO.Preload(_f))
}
return &s
}
func (s systemConfigQueryDo) FirstOrInit() (*SystemConfig, error) {
if result, err := s.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*SystemConfig), nil
}
}
func (s systemConfigQueryDo) FirstOrCreate() (*SystemConfig, error) {
if result, err := s.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*SystemConfig), nil
}
}
func (s systemConfigQueryDo) FindByPage(offset int, limit int) (result []*SystemConfig, count int64, err error) {
result, err = s.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = s.Offset(-1).Limit(-1).Count()
return
}
func (s systemConfigQueryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = s.Count()
if err != nil {
return
}
err = s.Offset(offset).Limit(limit).Scan(result)
return
}
func (s systemConfigQueryDo) Scan(result interface{}) (err error) {
return s.DO.Scan(result)
}
func (s systemConfigQueryDo) Delete(models ...*SystemConfig) (result gen.ResultInfo, err error) {
return s.DO.Delete(models)
}
// ForceDelete performs a permanent delete (ignores soft-delete) for current scope.
func (s systemConfigQueryDo) ForceDelete() (gen.ResultInfo, error) {
return s.Unscoped().Delete()
}
// Inc increases the given column by step for current scope.
func (s systemConfigQueryDo) Inc(column field.Expr, step int64) (gen.ResultInfo, error) {
// column = column + step
e := field.NewUnsafeFieldRaw("?+?", column.RawExpr(), step)
return s.DO.UpdateColumn(column, e)
}
// Dec decreases the given column by step for current scope.
func (s systemConfigQueryDo) Dec(column field.Expr, step int64) (gen.ResultInfo, error) {
// column = column - step
e := field.NewUnsafeFieldRaw("?-?", column.RawExpr(), step)
return s.DO.UpdateColumn(column, e)
}
// Sum returns SUM(column) for current scope.
func (s systemConfigQueryDo) Sum(column field.Expr) (float64, error) {
var _v float64
agg := field.NewUnsafeFieldRaw("SUM(?)", column.RawExpr())
if err := s.Select(agg).Scan(&_v); err != nil {
return 0, err
}
return _v, nil
}
// Avg returns AVG(column) for current scope.
func (s systemConfigQueryDo) Avg(column field.Expr) (float64, error) {
var _v float64
agg := field.NewUnsafeFieldRaw("AVG(?)", column.RawExpr())
if err := s.Select(agg).Scan(&_v); err != nil {
return 0, err
}
return _v, nil
}
// Min returns MIN(column) for current scope.
func (s systemConfigQueryDo) Min(column field.Expr) (float64, error) {
var _v float64
agg := field.NewUnsafeFieldRaw("MIN(?)", column.RawExpr())
if err := s.Select(agg).Scan(&_v); err != nil {
return 0, err
}
return _v, nil
}
// Max returns MAX(column) for current scope.
func (s systemConfigQueryDo) Max(column field.Expr) (float64, error) {
var _v float64
agg := field.NewUnsafeFieldRaw("MAX(?)", column.RawExpr())
if err := s.Select(agg).Scan(&_v); err != nil {
return 0, err
}
return _v, nil
}
// PluckMap returns a map[key]value for selected key/value expressions within current scope.
func (s systemConfigQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}, error) {
do := s.Select(key, val)
rows, err := do.DO.Rows()
if err != nil {
return nil, err
}
defer rows.Close()
mm := make(map[interface{}]interface{})
for rows.Next() {
var k interface{}
var v interface{}
if err := rows.Scan(&k, &v); err != nil {
return nil, err
}
mm[k] = v
}
return mm, rows.Err()
}
// Exists returns true if any record matches the given conditions.
func (s systemConfigQueryDo) Exists(conds ...gen.Condition) (bool, error) {
cnt, err := s.Where(conds...).Count()
if err != nil {
return false, err
}
return cnt > 0, nil
}
// PluckIDs returns all primary key values under current scope.
func (s systemConfigQueryDo) PluckIDs() ([]int64, error) {
ids := make([]int64, 0, 16)
pk := field.NewInt64(s.TableName(), "id")
if err := s.DO.Pluck(pk, &ids); err != nil {
return nil, err
}
return ids, nil
}
// GetByID finds a single record by primary key.
func (s systemConfigQueryDo) GetByID(id int64) (*SystemConfig, error) {
pk := field.NewInt64(s.TableName(), "id")
return s.Where(pk.Eq(id)).First()
}
// GetByIDs finds records by primary key list.
func (s systemConfigQueryDo) GetByIDs(ids ...int64) ([]*SystemConfig, error) {
if len(ids) == 0 {
return []*SystemConfig{}, nil
}
pk := field.NewInt64(s.TableName(), "id")
return s.Where(pk.In(ids...)).Find()
}
// DeleteByID deletes records by primary key.
func (s systemConfigQueryDo) DeleteByID(id int64) (gen.ResultInfo, error) {
pk := field.NewInt64(s.TableName(), "id")
return s.Where(pk.Eq(id)).Delete()
}
// DeleteByIDs deletes records by a list of primary keys.
func (s systemConfigQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
if len(ids) == 0 {
return gen.ResultInfo{RowsAffected: 0, Error: nil}, nil
}
pk := field.NewInt64(s.TableName(), "id")
return s.Where(pk.In(ids...)).Delete()
}
func (s *systemConfigQueryDo) withDO(do gen.Dao) *systemConfigQueryDo {
s.DO = *do.(*gen.DO)
return s
}