package system import ( "context" "encoding/json" "management/internal/erpserver/model/dto" "management/internal/erpserver/model/system" "management/internal/erpserver/repository" "management/internal/pkg/database" "management/internal/pkg/know/pearadmin" "gorm.io/datatypes" ) type configRepository struct { repo *repository.Repository } func NewConfigRepository(repo *repository.Repository) system.ConfigRepository { return &configRepository{ repo: repo, } } func (r *configRepository) Initialize(ctx context.Context) error { _, err := r.GetByKey(ctx, pearadmin.PearKey) if err != nil { if database.IsNoRows(err) { b, e := json.Marshal(pearadmin.PearJson) if e != nil { return e } s := system.Config{ Key: pearadmin.PearKey, Value: datatypes.JSON(b), } return r.Create(ctx, &s) } return err } return nil } func (r *configRepository) Create(ctx context.Context, obj *system.Config) error { return r.repo.DB(ctx).Create(obj).Error } func (r *configRepository) Update(ctx context.Context, obj *system.Config) error { return r.repo.DB(ctx).Save(obj).Error } func (r *configRepository) Get(ctx context.Context, id int32) (*system.Config, error) { var obj system.Config err := r.repo.DB(ctx).First(&obj, id).Error if err != nil { return nil, err } return &obj, nil } func (r *configRepository) GetByKey(ctx context.Context, key string) (*system.Config, error) { var obj system.Config err := r.repo.DB(ctx).Where("key = ?", key).First(&obj).Error if err != nil { return nil, err } return &obj, nil } func (r *configRepository) GetValueByKey(ctx context.Context, key string) ([]byte, error) { var obj system.Config err := r.repo.DB(ctx).Where("key = ?", key).First(&obj).Error if err != nil { return nil, err } return obj.Value, nil } func (r *configRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Config, int64, error) { query := r.repo.DB(ctx). Model(&system.Config{}). Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd) var count int64 err := query.Count(&count).Error if err != nil { return nil, 0, err } var configs []*system.Config err = query. Order("id DESC"). Offset((q.Page - 1) * q.Rows). Limit(q.Rows). Find(&configs). Error if err != nil { return nil, 0, err } return configs, count, nil }