diff --git a/action_create.go b/action_create.go index eebbd0e..75788f8 100644 --- a/action_create.go +++ b/action_create.go @@ -11,14 +11,16 @@ import ( // CreateOptions ... type CreateOptions struct { - DeviceID string - UserID string - UserAgent string - AppVersion string - IP string - FCMToken string - AuthToken string - Language string + DeviceID string + UserID string + UserAgent string + AppVersion string + IP string + FCMToken string + AuthToken string + Language string + Model string + Manufacturer string } // Create ... @@ -71,6 +73,8 @@ func (payload CreateOptions) newDevice() (result Device, err error) { LastActivatedAt: timeNow, CreatedAt: timeNow, FCMToken: payload.FCMToken, + Model: payload.Model, + Manufacturer: payload.Manufacturer, } // App version diff --git a/action_get_all.go b/action_get_all.go new file mode 100644 index 0000000..b0d4bcd --- /dev/null +++ b/action_get_all.go @@ -0,0 +1,52 @@ +package devicemngmt + +import ( + "context" + + "github.com/Selly-Modules/mongodb" + "go.mongodb.org/mongo-driver/bson" +) + +// FindAllDevicesByUserID ... +func (s Service) FindAllDevicesByUserID(userID string) []ResponseDevice { + var ( + ctx = context.Background() + col = s.getDeviceCollection() + docs = make([]Device, 0) + result = make([]ResponseDevice, 0) + cond = bson.M{ + "userID": mongodb.NewIDFromString(userID), + } + ) + + // Find + cursor, err := col.Find(ctx, cond) + if err != nil { + return result + } + defer cursor.Close(ctx) + cursor.All(ctx, &docs) + + // Get response data + for _, doc := range docs { + result = append(result, ResponseDevice{ + ID: doc.ID, + DeviceID: doc.DeviceID, + IP: doc.IP, + OS: ResponseOS{ + Name: doc.OSName, + Version: doc.OSVersion, + }, + AppVersion: doc.AppVersion, + Language: doc.Language, + IsMobile: doc.IsMobile, + FCMToken: doc.FCMToken, + Model: doc.Model, + Manufacturer: doc.Manufacturer, + LastActivatedAt: doc.LastActivatedAt, + CreatedAt: doc.CreatedAt, + }) + } + + return result +} diff --git a/model.go b/model.go index 7c00d78..1036b19 100644 --- a/model.go +++ b/model.go @@ -20,5 +20,29 @@ type Device struct { UserID primitive.ObjectID `bson:"userID" json:"userId"` AuthToken string `bson:"authToken" json:"authToken"` FCMToken string `bson:"fcmToken" json:"fcmToken"` + Model string `bson:"model,omitempty" json:"model,omitempty"` + Manufacturer string `bson:"manufacturer,omitempty" json:"manufacturer,omitempty"` CreatedAt time.Time `bson:"createdAt" json:"createdAt"` } + +// ResponseOS ... +type ResponseOS struct { + Name string `json:"name"` + Version string `json:"version"` +} + +// ResponseDevice ... +type ResponseDevice struct { + ID primitive.ObjectID `json:"_id"` + DeviceID string `json:"deviceId"` + IP string `json:"ip"` + OS ResponseOS `json:"os"` + AppVersion string `json:"appVersion"` + Language string `json:"language"` + IsMobile bool `json:"isMobile"` + FCMToken string `json:"fcmToken"` + Model string `json:"model,omitempty"` + Manufacturer string `json:"manufacturer,omitempty"` + LastActivatedAt time.Time `json:"lastActivatedAt"` + CreatedAt time.Time `json:"createdAt"` +} diff --git a/validate.go b/validate.go index 9efc49f..476badd 100644 --- a/validate.go +++ b/validate.go @@ -6,7 +6,7 @@ import ( "github.com/Selly-Modules/logger" ) -func (co CreateOptions) validate() error{ +func (co CreateOptions) validate() error { // DeviceID if co.DeviceID == "" { logger.Error("devicemngt - Create: no deviceID data", logger.LogData{ @@ -20,7 +20,7 @@ func (co CreateOptions) validate() error{ logger.Error("devicemngt - Create: no userAgent data", logger.LogData{ "payload": co, }) - return errors.New("no userAgent data") + return errors.New("no userAgent data") } // IP