| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package store
- import (
- "encoding/json"
- "gorm.io/datatypes"
- "gorm.io/gorm"
- "spider/internal/model"
- )
- // GetSetting reads a setting by key. Returns nil if not found.
- func (s *Store) GetSetting(key string) (*model.Setting, error) {
- var setting model.Setting
- err := s.DB.Where("`key` = ?", key).First(&setting).Error
- if err == gorm.ErrRecordNotFound {
- return nil, nil
- }
- return &setting, err
- }
- // SetSetting creates or updates a setting.
- func (s *Store) SetSetting(key string, value any) error {
- data, err := json.Marshal(value)
- if err != nil {
- return err
- }
- var existing model.Setting
- err = s.DB.Where("`key` = ?", key).First(&existing).Error
- if err == gorm.ErrRecordNotFound {
- return s.DB.Create(&model.Setting{
- Key: key,
- Value: datatypes.JSON(data),
- }).Error
- }
- if err != nil {
- return err
- }
- return s.DB.Model(&existing).Update("value", datatypes.JSON(data)).Error
- }
- // GetAPIKeysConfig reads the API keys config from settings.
- func (s *Store) GetAPIKeysConfig() (*model.APIKeysConfig, error) {
- setting, err := s.GetSetting("api_keys")
- if err != nil {
- return nil, err
- }
- if setting == nil {
- return &model.APIKeysConfig{}, nil
- }
- var cfg model.APIKeysConfig
- if err := json.Unmarshal(setting.Value, &cfg); err != nil {
- return &model.APIKeysConfig{}, nil
- }
- return &cfg, nil
- }
- // GetGradingConfig reads the grading config from settings, or returns default.
- func (s *Store) GetGradingConfig() (*model.GradingConfig, error) {
- setting, err := s.GetSetting("grading")
- if err != nil {
- return nil, err
- }
- if setting == nil {
- cfg := model.DefaultGradingConfig()
- return &cfg, nil
- }
- var cfg model.GradingConfig
- if err := json.Unmarshal(setting.Value, &cfg); err != nil {
- cfg = model.DefaultGradingConfig()
- return &cfg, nil
- }
- return &cfg, nil
- }
|