package system import ( "context" "time" "kra/internal/biz/system" "kra/internal/data/model" "kra/internal/data/query" "gorm.io/gorm" ) // ParamsRepo 系统参数仓储实现 type ParamsRepo struct { data *gorm.DB } // NewParamsRepo 创建系统参数仓储 func NewParamsRepo(data *gorm.DB) system.ParamsRepo { return &ParamsRepo{data: data} } // Create 创建参数 func (r *ParamsRepo) Create(ctx context.Context, params *system.Params) error { m := toParamsModel(params) return query.Use(r.data).SysParam.WithContext(ctx).Create(m) } // Delete 删除参数 func (r *ParamsRepo) Delete(ctx context.Context, id uint) error { q := query.Use(r.data).SysParam _, err := q.WithContext(ctx).Where(q.ID.Eq(int64(id))).Delete() return err } // DeleteByIds 批量删除参数 func (r *ParamsRepo) DeleteByIds(ctx context.Context, ids []uint) error { q := query.Use(r.data).SysParam int64Ids := make([]int64, len(ids)) for i, id := range ids { int64Ids[i] = int64(id) } _, err := q.WithContext(ctx).Where(q.ID.In(int64Ids...)).Delete() return err } // Update 更新参数 func (r *ParamsRepo) Update(ctx context.Context, params *system.Params) error { q := query.Use(r.data).SysParam _, err := q.WithContext(ctx).Where(q.ID.Eq(int64(params.ID))).Updates(toParamsModel(params)) return err } // FindByID 根据ID查找参数 func (r *ParamsRepo) FindByID(ctx context.Context, id uint) (*system.Params, error) { q := query.Use(r.data).SysParam m, err := q.WithContext(ctx).Where(q.ID.Eq(int64(id))).First() if err != nil { return nil, err } return toParamsBiz(m), nil } // FindByKey 根据Key查找参数 func (r *ParamsRepo) FindByKey(ctx context.Context, key string) (*system.Params, error) { q := query.Use(r.data).SysParam m, err := q.WithContext(ctx).Where(q.Key.Eq(key)).First() if err != nil { return nil, err } return toParamsBiz(m), nil } // FindList 查找参数列表 func (r *ParamsRepo) FindList(ctx context.Context, page, pageSize int, filters map[string]interface{}) ([]*system.Params, int64, error) { q := query.Use(r.data).SysParam do := q.WithContext(ctx) // 应用过滤条件 if name, ok := filters["name"].(string); ok && name != "" { do = do.Where(q.Name.Like("%" + name + "%")) } if key, ok := filters["key"].(string); ok && key != "" { do = do.Where(q.Key.Like("%" + key + "%")) } if startTime, ok := filters["start_time"].(*time.Time); ok && startTime != nil { do = do.Where(q.CreatedAt.Gte(*startTime)) } if endTime, ok := filters["end_time"].(*time.Time); ok && endTime != nil { do = do.Where(q.CreatedAt.Lte(*endTime)) } // 获取总数 total, err := do.Count() if err != nil { return nil, 0, err } // 分页查询 if pageSize > 0 { do = do.Limit(pageSize).Offset((page - 1) * pageSize) } list, err := do.Find() if err != nil { return nil, 0, err } result := make([]*system.Params, len(list)) for i, m := range list { result[i] = toParamsBiz(m) } return result, total, nil } // toParamsModel 转换为数据模型 func toParamsModel(p *system.Params) *model.SysParam { return &model.SysParam{ ID: int64(p.ID), Name: p.Name, Key: p.Key, Value: p.Value, Desc: p.Desc, } } // toParamsBiz 转换为业务实体 func toParamsBiz(m *model.SysParam) *system.Params { return &system.Params{ ID: uint(m.ID), CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, Name: m.Name, Key: m.Key, Value: m.Value, Desc: m.Desc, } }