Merge pull request #5 from Selly-Modules/feature/updateMethod
add update method
This commit is contained in:
commit
61106ecdc1
|
@ -37,10 +37,7 @@ func (s Service) Create(payload CreateOptions) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New device data from payload
|
// New device data from payload
|
||||||
deviceData, err := payload.newDevice()
|
deviceData := payload.newDevice()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find deviceID existed or not
|
// Find deviceID existed or not
|
||||||
if s.isDeviceIDExisted(ctx, deviceData.DeviceID) {
|
if s.isDeviceIDExisted(ctx, deviceData.DeviceID) {
|
||||||
|
@ -60,13 +57,17 @@ func (s Service) Create(payload CreateOptions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (payload CreateOptions) newDevice() (result Device, err error) {
|
func (payload CreateOptions) newDevice() Device {
|
||||||
timeNow := now()
|
timeNow := now()
|
||||||
device := Device{
|
|
||||||
|
// Get userAgent data
|
||||||
|
osName, osVersion, isMobile := getUserAgentData(payload.UserAgent)
|
||||||
|
|
||||||
|
return Device{
|
||||||
ID: mongodb.NewObjectID(),
|
ID: mongodb.NewObjectID(),
|
||||||
DeviceID: payload.DeviceID,
|
DeviceID: payload.DeviceID,
|
||||||
OSName: getOSName(payload.UserAgent),
|
OSName: osName,
|
||||||
OSVersion: getOSVersion(payload.UserAgent),
|
OSVersion: osVersion,
|
||||||
IP: payload.IP,
|
IP: payload.IP,
|
||||||
Language: getLanguage(payload.Language),
|
Language: getLanguage(payload.Language),
|
||||||
AuthToken: payload.AuthToken,
|
AuthToken: payload.AuthToken,
|
||||||
|
@ -76,14 +77,7 @@ func (payload CreateOptions) newDevice() (result Device, err error) {
|
||||||
Model: payload.Model,
|
Model: payload.Model,
|
||||||
Manufacturer: payload.Manufacturer,
|
Manufacturer: payload.Manufacturer,
|
||||||
UserID: payload.UserID,
|
UserID: payload.UserID,
|
||||||
|
IsMobile: isMobile,
|
||||||
|
AppVersion: payload.AppVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
// App version
|
|
||||||
if payload.AppVersion != "" {
|
|
||||||
device.AppVersion = payload.AppVersion
|
|
||||||
device.IsMobile = true
|
|
||||||
}
|
|
||||||
|
|
||||||
result = device
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get userAgent data
|
||||||
|
osName, osVersion, isMobile := getUserAgentData(payload.UserAgent)
|
||||||
|
|
||||||
|
// Setup update data
|
||||||
|
updateData := bson.M{
|
||||||
|
"$set": bson.M{
|
||||||
|
"osName": osName,
|
||||||
|
"osVersion": osVersion,
|
||||||
|
"ip": payload.IP,
|
||||||
|
"language": getLanguage(payload.Language),
|
||||||
|
"authToken": payload.AuthToken,
|
||||||
|
"fcmToken": payload.FCMToken,
|
||||||
|
"model": payload.Model,
|
||||||
|
"manufacturer": payload.Manufacturer,
|
||||||
|
"appVersion": payload.AppVersion,
|
||||||
|
"isMobile": isMobile,
|
||||||
|
"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
|
||||||
|
}
|
|
@ -31,14 +31,9 @@ func (s Service) isDeviceIDExisted(ctx context.Context, deviceID string) bool {
|
||||||
return !device.ID.IsZero()
|
return !device.ID.IsZero()
|
||||||
}
|
}
|
||||||
|
|
||||||
func getOSName(userAgent string) string {
|
func getUserAgentData(userAgent string) (string, string, bool) {
|
||||||
uaData := ua.New(userAgent)
|
uaData := ua.New(userAgent)
|
||||||
return uaData.OSInfo().Name
|
return uaData.OSInfo().Name, uaData.OSInfo().Version, uaData.Mobile()
|
||||||
}
|
|
||||||
|
|
||||||
func getOSVersion(userAgent string) string {
|
|
||||||
uaData := ua.New(userAgent)
|
|
||||||
return uaData.OSInfo().Version
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLanguage(lang string) string {
|
func getLanguage(lang string) string {
|
||||||
|
|
28
validate.go
28
validate.go
|
@ -49,3 +49,31 @@ func (co CreateOptions) validate() error {
|
||||||
|
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue