fix comment
This commit is contained in:
parent
d47368c3ae
commit
6e0eb8b415
|
@ -3,31 +3,38 @@ package devicemngmt
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/Selly-Modules/logger"
|
||||
"github.com/Selly-Modules/mongodb"
|
||||
ua "github.com/mssola/user_agent"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
// DeviceCreate ...
|
||||
type DeviceCreate struct {
|
||||
// CreateOptions ...
|
||||
type CreateOptions struct {
|
||||
DeviceID string
|
||||
UserID string
|
||||
UserAgent string
|
||||
AppVersion string
|
||||
IP string
|
||||
FCMToken string
|
||||
AuthToken string
|
||||
Language string
|
||||
}
|
||||
|
||||
// Create ...
|
||||
func (s Service) Create(payload DeviceCreate) error {
|
||||
func (s Service) Create(payload CreateOptions) error {
|
||||
var (
|
||||
col = s.getDeviceCollection()
|
||||
ctx = context.Background()
|
||||
)
|
||||
|
||||
// Validate payload
|
||||
err := payload.validate()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// New device data from payload
|
||||
deviceData, err := payload.newDevice()
|
||||
if err != nil {
|
||||
|
@ -43,7 +50,7 @@ func (s Service) Create(payload DeviceCreate) error {
|
|||
})
|
||||
}
|
||||
if !device.ID.IsZero() {
|
||||
return errors.New("deviceID already exists")
|
||||
return errors.New("this device is already existed")
|
||||
}
|
||||
|
||||
// Create device
|
||||
|
@ -53,78 +60,33 @@ func (s Service) Create(payload DeviceCreate) error {
|
|||
"doc": deviceData,
|
||||
"err": err.Error(),
|
||||
})
|
||||
return errors.New("create device fail")
|
||||
return fmt.Errorf("error when create device: %s", err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (payload DeviceCreate) newDevice() (result Device, err error) {
|
||||
func (payload CreateOptions) newDevice() (result Device, err error) {
|
||||
timeNow := now()
|
||||
device := Device{
|
||||
ID: mongodb.NewObjectID(),
|
||||
DeviceID: payload.DeviceID,
|
||||
OSName: getOSName(payload.UserAgent),
|
||||
OSVersion: getOSVersion(payload.UserAgent),
|
||||
IP: payload.IP,
|
||||
Language: getLanguage(payload.Language),
|
||||
AuthToken: payload.AuthToken,
|
||||
LastActivityAt: timeNow,
|
||||
CreatedAt: timeNow,
|
||||
FCMToken: payload.FCMToken,
|
||||
}
|
||||
|
||||
// Set deviceID
|
||||
if payload.DeviceID == "" {
|
||||
logger.Error("devicemngt - Create: no deviceID data", logger.LogData{
|
||||
"payload": payload,
|
||||
})
|
||||
err = errors.New("no deviceID data")
|
||||
return
|
||||
}
|
||||
device.DeviceID = payload.DeviceID
|
||||
|
||||
// OSName, OSVersion
|
||||
if payload.UserAgent == "" {
|
||||
logger.Error("devicemngt - Create: no userAgent data", logger.LogData{
|
||||
"payload": payload,
|
||||
})
|
||||
err = errors.New("no userAgent data")
|
||||
return
|
||||
}
|
||||
uaData := ua.New(payload.UserAgent)
|
||||
device.OSName = uaData.OSInfo().Name
|
||||
device.OSVersion = uaData.OSInfo().Version
|
||||
|
||||
// App version
|
||||
if payload.AppVersion != "" {
|
||||
device.AppVersion = payload.AppVersion
|
||||
device.IsMobile = true
|
||||
}
|
||||
|
||||
// IP
|
||||
if payload.IP == "" {
|
||||
logger.Error("devicemngt - Create: no ip data", logger.LogData{
|
||||
"payload": payload,
|
||||
})
|
||||
err = errors.New("no ip data")
|
||||
return
|
||||
}
|
||||
|
||||
// Language, default is vietnamese(vi)
|
||||
if payload.Language == "" {
|
||||
device.Language = viLanguage
|
||||
} else {
|
||||
device.Language = enLanguage
|
||||
}
|
||||
|
||||
// userIDe
|
||||
userID, _ := mongodb.NewIDFromString(payload.UserID)
|
||||
if userID.IsZero() {
|
||||
logger.Error("devicemngt - Create: invalid userID data", logger.LogData{
|
||||
"payload": payload,
|
||||
})
|
||||
err = errors.New("invalid userID data")
|
||||
return
|
||||
}
|
||||
|
||||
// Generate authToken from userID
|
||||
device.AuthToken = s.generateAuthToken(userID)
|
||||
|
||||
result = device
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
package devicemngmt
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
func (s Service) generateAuthToken(userID primitive.ObjectID) string {
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
||||
"_id": userID,
|
||||
"exp": now().Add(time.Second * 15552000).Unix(), // 6 months
|
||||
})
|
||||
tokenString, _ := token.SignedString([]byte(s.AuthSecret))
|
||||
return tokenString
|
||||
}
|
|
@ -2,10 +2,10 @@ package devicemngmt
|
|||
|
||||
// Constant ...
|
||||
const (
|
||||
TableDevice = "devices"
|
||||
tableDevice = "devices"
|
||||
|
||||
timezoneHCM = "Asia/Ho_Chi_Minh"
|
||||
|
||||
viLanguage = "vi"
|
||||
enLanguage = "en"
|
||||
langVi = "vi"
|
||||
langEn = "en"
|
||||
)
|
||||
|
|
|
@ -19,8 +19,6 @@ type Config struct {
|
|||
MongoDB MongoDBConfig
|
||||
// Table prefix, each service has its own prefix
|
||||
TablePrefix string
|
||||
// Auth secret, used to sign token
|
||||
AuthSecret string
|
||||
}
|
||||
|
||||
// Service ...
|
||||
|
@ -32,9 +30,9 @@ type Service struct {
|
|||
var s *Service
|
||||
|
||||
// Init ...
|
||||
func Init(config Config) error {
|
||||
if config.MongoDB.Host == "" || config.TablePrefix == "" || config.AuthSecret == "" {
|
||||
return errors.New("please provide all necessary information for init device")
|
||||
func Init(config Config) (*Service, error) {
|
||||
if config.MongoDB.Host == "" || config.TablePrefix == "" {
|
||||
return nil, errors.New("please provide all necessary information for init device")
|
||||
}
|
||||
|
||||
// Connect MongoDB
|
||||
|
@ -48,7 +46,7 @@ func Init(config Config) error {
|
|||
)
|
||||
if err != nil {
|
||||
fmt.Println("Cannot init module DEVICE MANAGEMENT", err)
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s = &Service{
|
||||
|
@ -56,7 +54,7 @@ func Init(config Config) error {
|
|||
DB: db,
|
||||
}
|
||||
|
||||
return nil
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// GetInstance ...
|
||||
|
|
21
helper.go
21
helper.go
|
@ -3,10 +3,29 @@ package devicemngmt
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
ua "github.com/mssola/user_agent"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
// getDeviceCollection ...
|
||||
func (s Service) getDeviceCollection() *mongo.Collection {
|
||||
return s.DB.Collection(fmt.Sprintf("%s-%s", s.TablePrefix, TableDevice))
|
||||
return s.DB.Collection(fmt.Sprintf("%s-%s", s.TablePrefix, tableDevice))
|
||||
}
|
||||
|
||||
func getOSName(userAgent string) string {
|
||||
uaData := ua.New(userAgent)
|
||||
return uaData.OSInfo().Name
|
||||
}
|
||||
|
||||
func getOSVersion(userAgent string) string {
|
||||
uaData := ua.New(userAgent)
|
||||
return uaData.OSInfo().Version
|
||||
}
|
||||
|
||||
func getLanguage(lang string) string {
|
||||
// Language, default is vietnamese(vi)
|
||||
if lang == langEn {
|
||||
return langEn
|
||||
}
|
||||
return langVi
|
||||
}
|
||||
|
|
26
model.go
26
model.go
|
@ -8,17 +8,17 @@ import (
|
|||
|
||||
// Device ...
|
||||
type Device struct {
|
||||
ID primitive.ObjectID `bson:"_id"`
|
||||
DeviceID string `bson:"deviceID"` // unique
|
||||
IP string `bson:"ip"`
|
||||
OSName string `bson:"osName"`
|
||||
OSVersion string `bson:"osVersion"`
|
||||
AppVersion string `bson:"appVersion"`
|
||||
Language string `bson:"language"` // vi, en
|
||||
IsMobile bool `bson:"isMobile"`
|
||||
LastActivityAt time.Time `bson:"lastActivityAt"`
|
||||
UserID primitive.ObjectID `bson:"userID"`
|
||||
AuthToken string `bson:"authToken"`
|
||||
FCMToken string `bson:"fcmToken"`
|
||||
CreatedAt time.Time `bson:"createdAt"`
|
||||
ID primitive.ObjectID `bson:"_id" json:"_id"`
|
||||
DeviceID string `bson:"deviceID" json:"deviceID"` // unique
|
||||
IP string `bson:"ip" json:"ip"`
|
||||
OSName string `bson:"osName" json:"osName"`
|
||||
OSVersion string `bson:"osVersion" json:"osVersion"`
|
||||
AppVersion string `bson:"appVersion" json:"appVersion"`
|
||||
Language string `bson:"language" json:"language"` // vi, en
|
||||
IsMobile bool `bson:"isMobile" json:"isMobile"`
|
||||
LastActivityAt time.Time `bson:"lastActivityAt" json:"lastActivityAt"`
|
||||
UserID primitive.ObjectID `bson:"userID" json:"userID"`
|
||||
AuthToken string `bson:"authToken" json:"authToken"`
|
||||
FCMToken string `bson:"fcmToken" json:"fcmToken"`
|
||||
CreatedAt time.Time `bson:"createdAt" json:"createdAt"`
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package devicemngmt
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/Selly-Modules/logger"
|
||||
)
|
||||
|
||||
func (co CreateOptions) validate() error{
|
||||
// DeviceID
|
||||
if co.DeviceID == "" {
|
||||
logger.Error("devicemngt - Create: no deviceID data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no deviceID data")
|
||||
}
|
||||
|
||||
// UserAgent
|
||||
if co.UserAgent == "" {
|
||||
logger.Error("devicemngt - Create: no userAgent data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no userAgent data")
|
||||
}
|
||||
|
||||
// IP
|
||||
if co.IP == "" {
|
||||
logger.Error("devicemngt - Create: no ip data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no ip data")
|
||||
}
|
||||
|
||||
// UserID
|
||||
if co.UserID == "" {
|
||||
logger.Error("devicemngt - Create: no userID data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no userID data")
|
||||
}
|
||||
|
||||
// AuthToken
|
||||
if co.AuthToken == "" {
|
||||
logger.Error("devicemngt - Create: no authToken data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no authToken data")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue