lens @ 5bb3d3ecabfc658035e69d5d5286cabaf44e3f73

 1package sql
 2
 3import (
 4	"context"
 5
 6	"gorm.io/gorm"
 7
 8	"git.sr.ht/~gabrielgio/img/pkg/components/settings"
 9)
10
11type (
12	Settings struct {
13		gorm.Model
14		ShowMode  bool
15		ShowOwner bool
16	}
17
18	SettingsRepository struct {
19		db *gorm.DB
20	}
21)
22
23var _ settings.Repository = &SettingsRepository{}
24
25func NewSettingsRespository(db *gorm.DB) *SettingsRepository {
26	return &SettingsRepository{
27		db: db,
28	}
29}
30
31func (self *SettingsRepository) ensureSettings(ctx context.Context) (*Settings, error) {
32	var (
33		db = self.db.WithContext(ctx)
34		s  = &Settings{}
35	)
36	result := db.Limit(1).Find(s)
37	if result.Error != nil {
38		return nil, result.Error
39	}
40
41	return s, nil
42}
43
44func (self *SettingsRepository) Save(ctx context.Context, toSaveSettings *settings.Settings) error {
45	db := self.db.WithContext(ctx)
46
47	s, err := self.ensureSettings(ctx)
48	if err != nil {
49		return err
50	}
51
52	s.ShowMode = toSaveSettings.ShowMode
53	s.ShowOwner = toSaveSettings.ShowOwner
54
55	result := db.Save(s)
56	return result.Error
57}
58
59func (self *SettingsRepository) Load(ctx context.Context) (*settings.Settings, error) {
60	s, err := self.ensureSettings(ctx)
61	if err != nil {
62		return nil, err
63	}
64
65	return &settings.Settings{
66		ShowMode:  s.ShowMode,
67		ShowOwner: s.ShowOwner,
68	}, nil
69}