settings.go

 1package database
 2
 3import (
 4	"context"
 5
 6	"github.com/charmbracelet/soft-serve/pkg/access"
 7	"github.com/charmbracelet/soft-serve/pkg/db"
 8	"github.com/charmbracelet/soft-serve/pkg/store"
 9)
10
11type settingsStore struct{}
12
13var _ store.SettingStore = (*settingsStore)(nil)
14
15// GetAllowKeylessAccess implements store.SettingStore.
16func (*settingsStore) GetAllowKeylessAccess(ctx context.Context, tx db.Handler) (bool, error) {
17	var allow bool
18	query := tx.Rebind(`SELECT value FROM settings WHERE "key" = 'allow_keyless'`)
19	if err := tx.GetContext(ctx, &allow, query); err != nil {
20		return false, db.WrapError(err) //nolint:wrapcheck
21	}
22	return allow, nil
23}
24
25// GetAnonAccess implements store.SettingStore.
26func (*settingsStore) GetAnonAccess(ctx context.Context, tx db.Handler) (access.AccessLevel, error) {
27	var level string
28	query := tx.Rebind(`SELECT value FROM settings WHERE "key" = 'anon_access'`)
29	if err := tx.GetContext(ctx, &level, query); err != nil {
30		return access.NoAccess, db.WrapError(err) //nolint:wrapcheck
31	}
32	return access.ParseAccessLevel(level), nil
33}
34
35// SetAllowKeylessAccess implements store.SettingStore.
36func (*settingsStore) SetAllowKeylessAccess(ctx context.Context, tx db.Handler, allow bool) error {
37	query := tx.Rebind(`UPDATE settings SET value = ?, updated_at = CURRENT_TIMESTAMP WHERE "key" = 'allow_keyless'`)
38	_, err := tx.ExecContext(ctx, query, allow)
39	return db.WrapError(err) //nolint:wrapcheck
40}
41
42// SetAnonAccess implements store.SettingStore.
43func (*settingsStore) SetAnonAccess(ctx context.Context, tx db.Handler, level access.AccessLevel) error {
44	query := tx.Rebind(`UPDATE settings SET value = ?, updated_at = CURRENT_TIMESTAMP WHERE "key" = 'anon_access'`)
45	_, err := tx.ExecContext(ctx, query, level.String())
46	return db.WrapError(err) //nolint:wrapcheck
47}