@@ -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.
1213func (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.
3956func (r * repository ) ReplaceSettings (settings * DeviceSettings ) (* DeviceSettings , error ) {
4057 err := r .db .Transaction (func (tx * gorm.DB ) error {
4158 return tx .Save (settings ).Error
0 commit comments