| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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
- }
|