- 前端: 所有界面显示、i18n 文本、组件中的品牌名称 - 后端: 服务层、设置默认值、邮件模板、安装向导 - 数据库: 迁移脚本注释 - 保持功能完全一致,仅更改品牌名称 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/Wei-Shaw/sub2api/ent"
|
|
"github.com/Wei-Shaw/sub2api/ent/setting"
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
)
|
|
|
|
type settingRepository struct {
|
|
client *ent.Client
|
|
}
|
|
|
|
func NewSettingRepository(client *ent.Client) service.SettingRepository {
|
|
return &settingRepository{client: client}
|
|
}
|
|
|
|
func (r *settingRepository) Get(ctx context.Context, key string) (*service.Setting, error) {
|
|
m, err := r.client.Setting.Query().Where(setting.KeyEQ(key)).Only(ctx)
|
|
if err != nil {
|
|
if ent.IsNotFound(err) {
|
|
return nil, service.ErrSettingNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &service.Setting{
|
|
ID: m.ID,
|
|
Key: m.Key,
|
|
Value: m.Value,
|
|
UpdatedAt: m.UpdatedAt,
|
|
}, nil
|
|
}
|
|
|
|
func (r *settingRepository) GetValue(ctx context.Context, key string) (string, error) {
|
|
setting, err := r.Get(ctx, key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return setting.Value, nil
|
|
}
|
|
|
|
func (r *settingRepository) Set(ctx context.Context, key, value string) error {
|
|
now := time.Now()
|
|
return r.client.Setting.
|
|
Create().
|
|
SetKey(key).
|
|
SetValue(value).
|
|
SetUpdatedAt(now).
|
|
OnConflictColumns(setting.FieldKey).
|
|
UpdateNewValues().
|
|
Exec(ctx)
|
|
}
|
|
|
|
func (r *settingRepository) GetMultiple(ctx context.Context, keys []string) (map[string]string, error) {
|
|
if len(keys) == 0 {
|
|
return map[string]string{}, nil
|
|
}
|
|
settings, err := r.client.Setting.Query().Where(setting.KeyIn(keys...)).All(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make(map[string]string)
|
|
for _, s := range settings {
|
|
result[s.Key] = s.Value
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (r *settingRepository) SetMultiple(ctx context.Context, settings map[string]string) error {
|
|
if len(settings) == 0 {
|
|
return nil
|
|
}
|
|
|
|
now := time.Now()
|
|
builders := make([]*ent.SettingCreate, 0, len(settings))
|
|
for key, value := range settings {
|
|
builders = append(builders, r.client.Setting.Create().SetKey(key).SetValue(value).SetUpdatedAt(now))
|
|
}
|
|
return r.client.Setting.
|
|
CreateBulk(builders...).
|
|
OnConflictColumns(setting.FieldKey).
|
|
UpdateNewValues().
|
|
Exec(ctx)
|
|
}
|
|
|
|
func (r *settingRepository) GetAll(ctx context.Context) (map[string]string, error) {
|
|
settings, err := r.client.Setting.Query().All(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make(map[string]string)
|
|
for _, s := range settings {
|
|
result[s.Key] = s.Value
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (r *settingRepository) Delete(ctx context.Context, key string) error {
|
|
_, err := r.client.Setting.Delete().Where(setting.KeyEQ(key)).Exec(ctx)
|
|
return err
|
|
}
|