Skip to content

Commit 7e892e2

Browse files
committed
[settings] fix minor issues
1 parent cf38806 commit 7e892e2

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

internal/sms-gateway/handlers/settings/3rdparty.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ type ThirdPartyController struct {
4444
//
4545
// Get settings
4646
func (h *ThirdPartyController) get(user models.User, c *fiber.Ctx) error {
47-
settings, err := h.settingsSvc.GetSettings(user.ID)
47+
settings, err := h.settingsSvc.GetSettings(user.ID, true)
4848
if err != nil {
4949
return fmt.Errorf("can't get settings: %w", err)
5050
}

internal/sms-gateway/handlers/settings/mobile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type MobileController struct {
4141
//
4242
// Get settings
4343
func (h *MobileController) get(device models.Device, c *fiber.Ctx) error {
44-
settings, err := h.settingsSvc.GetSettings(device.UserID)
44+
settings, err := h.settingsSvc.GetSettings(device.UserID, false)
4545
if err != nil {
4646
return fmt.Errorf("can't get settings for device %s (user ID: %s): %w", device.ID, device.UserID, err)
4747
}

internal/sms-gateway/modules/settings/repository.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type repository struct {
99
db *gorm.DB
1010
}
1111

12+
// GetSettings retrieves the device settings for a user by their userID.
1213
func (r *repository) GetSettings(userID string) (*DeviceSettings, error) {
1314
settings := &DeviceSettings{}
1415
err := r.db.Where("user_id = ?", userID).Limit(1).Find(settings).Error
@@ -19,23 +20,39 @@ func (r *repository) GetSettings(userID string) (*DeviceSettings, error) {
1920
return settings, nil
2021
}
2122

22-
func (r *repository) UpdateSettings(settings *DeviceSettings) error {
23-
return r.db.Transaction(func(tx *gorm.DB) error {
23+
// UpdateSettings updates the settings for a user.
24+
func (r *repository) UpdateSettings(settings *DeviceSettings) (*DeviceSettings, error) {
25+
var updatedSettings *DeviceSettings
26+
err := r.db.Transaction(func(tx *gorm.DB) error {
2427
source := &DeviceSettings{UserID: settings.UserID}
25-
if err := r.db.Clauses(clause.Locking{Strength: "UPDATE"}).Limit(1).Find(source).Error; err != nil {
28+
if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).Limit(1).Find(source).Error; err != nil {
2629
return err
2730
}
2831

2932
if source.Settings == nil {
3033
source.Settings = map[string]any{}
3134
}
3235

33-
settings.Settings = appendMap(source.Settings, settings.Settings, rules)
36+
var err error
37+
settings.Settings, err = appendMap(source.Settings, settings.Settings, rules)
38+
if err != nil {
39+
return err
40+
}
41+
42+
if err := tx.Clauses(clause.OnConflict{UpdateAll: true}).Create(settings).Error; err != nil {
43+
return err
44+
}
3445

35-
return r.db.Clauses(clause.OnConflict{UpdateAll: true}).Create(settings).Error
46+
// Return the updated settings
47+
updatedSettings = settings
48+
return nil
3649
})
50+
return updatedSettings, err
3751
}
3852

53+
// ReplaceSettings replaces the settings for a user.
54+
//
55+
// This function will overwrite all existing settings for the user.
3956
func (r *repository) ReplaceSettings(settings *DeviceSettings) (*DeviceSettings, error) {
4057
err := r.db.Transaction(func(tx *gorm.DB) error {
4158
return tx.Save(settings).Error

internal/sms-gateway/modules/settings/service.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ type Service struct {
1919
logger *zap.Logger
2020
}
2121

22-
func (s *Service) GetSettings(userID string) (map[string]any, error) {
22+
func (s *Service) GetSettings(userID string, public bool) (map[string]any, error) {
2323
settings, err := s.settings.GetSettings(userID)
2424
if err != nil {
2525
return nil, err
2626
}
2727

28+
if !public {
29+
return settings.Settings, nil
30+
}
31+
2832
return filterMap(settings.Settings, rulesPublic)
2933
}
3034

@@ -34,15 +38,15 @@ func (s *Service) UpdateSettings(userID string, settings map[string]any) (map[st
3438
return nil, err
3539
}
3640

37-
err = s.settings.UpdateSettings(&DeviceSettings{
41+
updatedSettings, err := s.settings.UpdateSettings(&DeviceSettings{
3842
UserID: userID,
3943
Settings: filtered,
4044
})
4145
if err != nil {
4246
return nil, err
4347
}
4448

45-
return s.GetSettings(userID)
49+
return filterMap(updatedSettings.Settings, rulesPublic)
4650
}
4751

4852
func (s *Service) ReplaceSettings(userID string, settings map[string]any) (map[string]any, error) {

internal/sms-gateway/modules/settings/utils.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,29 @@ func filterMap(m map[string]any, r map[string]any) (map[string]any, error) {
7676
return result, nil
7777
}
7878

79-
func appendMap(m1, m2 map[string]any, rules map[string]any) map[string]any {
79+
func appendMap(m1, m2 map[string]any, rules map[string]any) (map[string]any, error) {
80+
var err error
8081

8182
for field, rule := range rules {
8283
if ruleObj, ok := rule.(map[string]any); ok {
8384
if dataObj, ok := m2[field].(map[string]any); ok {
8485
if m1Field, ok := m1[field].(map[string]any); ok {
85-
m1[field] = appendMap(m1Field, dataObj, ruleObj)
86+
m1[field], err = appendMap(m1Field, dataObj, ruleObj)
87+
if err != nil {
88+
return nil, err
89+
}
8690
} else {
8791
// Initialize if not present or not a map
8892
newMap := make(map[string]any)
89-
m1[field] = appendMap(newMap, dataObj, ruleObj)
93+
m1[field], err = appendMap(newMap, dataObj, ruleObj)
94+
if err != nil {
95+
return nil, err
96+
}
9097
}
9198
} else if m2[field] == nil {
9299
continue
100+
} else {
101+
return nil, fmt.Errorf("expected field '%s' to be a map, but got %T", field, m2[field])
93102
}
94103
} else if _, ok := rule.(string); ok {
95104
if _, ok := m2[field]; !ok {
@@ -99,5 +108,5 @@ func appendMap(m1, m2 map[string]any, rules map[string]any) map[string]any {
99108
}
100109
}
101110

102-
return m1
111+
return m1, nil
103112
}

0 commit comments

Comments
 (0)