setting_repo.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package repository
  2. import (
  3. "context"
  4. "time"
  5. "github.com/Wei-Shaw/sub2api/ent"
  6. "github.com/Wei-Shaw/sub2api/ent/setting"
  7. "github.com/Wei-Shaw/sub2api/internal/service"
  8. )
  9. type settingRepository struct {
  10. client *ent.Client
  11. }
  12. func NewSettingRepository(client *ent.Client) service.SettingRepository {
  13. return &settingRepository{client: client}
  14. }
  15. func (r *settingRepository) Get(ctx context.Context, key string) (*service.Setting, error) {
  16. m, err := r.client.Setting.Query().Where(setting.KeyEQ(key)).Only(ctx)
  17. if err != nil {
  18. if ent.IsNotFound(err) {
  19. return nil, service.ErrSettingNotFound
  20. }
  21. return nil, err
  22. }
  23. return &service.Setting{
  24. ID: m.ID,
  25. Key: m.Key,
  26. Value: m.Value,
  27. UpdatedAt: m.UpdatedAt,
  28. }, nil
  29. }
  30. func (r *settingRepository) GetValue(ctx context.Context, key string) (string, error) {
  31. setting, err := r.Get(ctx, key)
  32. if err != nil {
  33. return "", err
  34. }
  35. return setting.Value, nil
  36. }
  37. func (r *settingRepository) Set(ctx context.Context, key, value string) error {
  38. now := time.Now()
  39. return r.client.Setting.
  40. Create().
  41. SetKey(key).
  42. SetValue(value).
  43. SetUpdatedAt(now).
  44. OnConflictColumns(setting.FieldKey).
  45. UpdateNewValues().
  46. Exec(ctx)
  47. }
  48. func (r *settingRepository) GetMultiple(ctx context.Context, keys []string) (map[string]string, error) {
  49. if len(keys) == 0 {
  50. return map[string]string{}, nil
  51. }
  52. settings, err := r.client.Setting.Query().Where(setting.KeyIn(keys...)).All(ctx)
  53. if err != nil {
  54. return nil, err
  55. }
  56. result := make(map[string]string)
  57. for _, s := range settings {
  58. result[s.Key] = s.Value
  59. }
  60. return result, nil
  61. }
  62. func (r *settingRepository) SetMultiple(ctx context.Context, settings map[string]string) error {
  63. if len(settings) == 0 {
  64. return nil
  65. }
  66. now := time.Now()
  67. builders := make([]*ent.SettingCreate, 0, len(settings))
  68. for key, value := range settings {
  69. builders = append(builders, r.client.Setting.Create().SetKey(key).SetValue(value).SetUpdatedAt(now))
  70. }
  71. return r.client.Setting.
  72. CreateBulk(builders...).
  73. OnConflictColumns(setting.FieldKey).
  74. UpdateNewValues().
  75. Exec(ctx)
  76. }
  77. func (r *settingRepository) GetAll(ctx context.Context) (map[string]string, error) {
  78. settings, err := r.client.Setting.Query().All(ctx)
  79. if err != nil {
  80. return nil, err
  81. }
  82. result := make(map[string]string)
  83. for _, s := range settings {
  84. result[s.Key] = s.Value
  85. }
  86. return result, nil
  87. }
  88. func (r *settingRepository) Delete(ctx context.Context, key string) error {
  89. _, err := r.client.Setting.Delete().Where(setting.KeyEQ(key)).Exec(ctx)
  90. return err
  91. }