From 1f62e375e70f3f144a4b6887883cb9cbb47f680d Mon Sep 17 00:00:00 2001 From: Hoang Date: Mon, 8 Nov 2021 08:52:10 +0700 Subject: [PATCH 1/2] add update method --- action_update.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ validate.go | 28 ++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 action_update.go diff --git a/action_update.go b/action_update.go new file mode 100644 index 0000000..bc1fb02 --- /dev/null +++ b/action_update.go @@ -0,0 +1,67 @@ +package devicemngmt + +import ( + "context" + "fmt" + + "github.com/Selly-Modules/logger" + "go.mongodb.org/mongo-driver/bson" +) + +// UpdateOptions ... +type UpdateOptions struct { + UserAgent string + AppVersion string + IP string + FCMToken string + AuthToken string + Language string + Model string + Manufacturer string +} + +// UpdateByDeviceID ... +func (s Service) UpdateByDeviceID(deviceID string, payload UpdateOptions) error { + var ( + ctx = context.Background() + col = s.getDeviceCollection() + cond = bson.M{ + "deviceID": deviceID, + } + ) + + // Validate payload + err := payload.validate() + if err != nil { + return err + } + + // Setup update data + updateData := bson.M{ + "$set": bson.M{ + "osName": getOSName(payload.UserAgent), + "osVersion": getOSVersion(payload.UserAgent), + "ip": payload.IP, + "language": getLanguage(payload.Language), + "authToken": payload.AuthToken, + "fcmToken": payload.FCMToken, + "model": payload.Model, + "manufacturer": payload.Manufacturer, + "appVersion": payload.AppVersion, + "isMobile": payload.AppVersion != "", + "lastActivatedAt": now(), + }, + } + + // Update + _, err = col.UpdateOne(ctx, cond, updateData) + if err != nil { + logger.Error("devicemngt - updateByDeviceID", logger.LogData{ + "deviceID": deviceID, + "err": err.Error(), + }) + return fmt.Errorf("error when update device: %s", err.Error()) + } + + return nil +} diff --git a/validate.go b/validate.go index 476badd..7dbb1c2 100644 --- a/validate.go +++ b/validate.go @@ -49,3 +49,31 @@ func (co CreateOptions) validate() error { return nil } + +func (uo UpdateOptions) validate() error { + // UserAgent + if uo.UserAgent == "" { + logger.Error("devicemngt - Update: no userAgent data", logger.LogData{ + "payload": uo, + }) + return errors.New("no userAgent data") + } + + // IP + if uo.IP == "" { + logger.Error("devicemngt - Update: no ip data", logger.LogData{ + "payload": uo, + }) + return errors.New("no ip data") + } + + // AuthToken + if uo.AuthToken == "" { + logger.Error("devicemngt - Update: no authToken data", logger.LogData{ + "payload": uo, + }) + return errors.New("no authToken data") + } + + return nil +} -- 2.34.1 From 39d2ca65fcdea2ca95f7af42efc96aaa58d774b8 Mon Sep 17 00:00:00 2001 From: Hoang Date: Mon, 8 Nov 2021 09:46:17 +0700 Subject: [PATCH 2/2] fix comment --- action_create.go | 28 +++++++++++----------------- action_update.go | 9 ++++++--- helper.go | 9 ++------- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/action_create.go b/action_create.go index 00e9898..d99bac7 100644 --- a/action_create.go +++ b/action_create.go @@ -37,10 +37,7 @@ func (s Service) Create(payload CreateOptions) error { } // New device data from payload - deviceData, err := payload.newDevice() - if err != nil { - return err - } + deviceData := payload.newDevice() // Find deviceID existed or not if s.isDeviceIDExisted(ctx, deviceData.DeviceID) { @@ -60,13 +57,17 @@ func (s Service) Create(payload CreateOptions) error { return nil } -func (payload CreateOptions) newDevice() (result Device, err error) { +func (payload CreateOptions) newDevice() Device { timeNow := now() - device := Device{ + + // Get userAgent data + osName, osVersion, isMobile := getUserAgentData(payload.UserAgent) + + return Device{ ID: mongodb.NewObjectID(), DeviceID: payload.DeviceID, - OSName: getOSName(payload.UserAgent), - OSVersion: getOSVersion(payload.UserAgent), + OSName: osName, + OSVersion: osVersion, IP: payload.IP, Language: getLanguage(payload.Language), AuthToken: payload.AuthToken, @@ -76,14 +77,7 @@ func (payload CreateOptions) newDevice() (result Device, err error) { Model: payload.Model, Manufacturer: payload.Manufacturer, UserID: payload.UserID, + IsMobile: isMobile, + AppVersion: payload.AppVersion, } - - // App version - if payload.AppVersion != "" { - device.AppVersion = payload.AppVersion - device.IsMobile = true - } - - result = device - return } diff --git a/action_update.go b/action_update.go index bc1fb02..b92321c 100644 --- a/action_update.go +++ b/action_update.go @@ -36,11 +36,14 @@ func (s Service) UpdateByDeviceID(deviceID string, payload UpdateOptions) error return err } + // Get userAgent data + osName, osVersion, isMobile := getUserAgentData(payload.UserAgent) + // Setup update data updateData := bson.M{ "$set": bson.M{ - "osName": getOSName(payload.UserAgent), - "osVersion": getOSVersion(payload.UserAgent), + "osName": osName, + "osVersion": osVersion, "ip": payload.IP, "language": getLanguage(payload.Language), "authToken": payload.AuthToken, @@ -48,7 +51,7 @@ func (s Service) UpdateByDeviceID(deviceID string, payload UpdateOptions) error "model": payload.Model, "manufacturer": payload.Manufacturer, "appVersion": payload.AppVersion, - "isMobile": payload.AppVersion != "", + "isMobile": isMobile, "lastActivatedAt": now(), }, } diff --git a/helper.go b/helper.go index 120e9d5..2e5d736 100644 --- a/helper.go +++ b/helper.go @@ -31,14 +31,9 @@ func (s Service) isDeviceIDExisted(ctx context.Context, deviceID string) bool { return !device.ID.IsZero() } -func getOSName(userAgent string) string { +func getUserAgentData(userAgent string) (string, string, bool) { uaData := ua.New(userAgent) - return uaData.OSInfo().Name -} - -func getOSVersion(userAgent string) string { - uaData := ua.New(userAgent) - return uaData.OSInfo().Version + return uaData.OSInfo().Name, uaData.OSInfo().Version, uaData.Mobile() } func getLanguage(lang string) string { -- 2.34.1