add createMethod #2
			
				
			
		
		
		
	| 
						 | 
					@ -68,7 +68,7 @@ func (payload CreateOptions) newDevice() (result Device, err error) {
 | 
				
			||||||
| 
						
							
 | 
				|||||||
		IP:              payload.IP,
 | 
							IP:              payload.IP,
 | 
				
			||||||
		Language:        getLanguage(payload.Language),
 | 
							Language:        getLanguage(payload.Language),
 | 
				
			||||||
		AuthToken:       payload.AuthToken,
 | 
							AuthToken:       payload.AuthToken,
 | 
				
			||||||
		LastActivityAt: timeNow,
 | 
							LastActivatedAt: timeNow,
 | 
				
			||||||
| 
							
								
									
 DeviceCreate -> CreateOptions DeviceCreate -> CreateOptions 
			
		deviceID already exists -> this device is already existed deviceID already exists -> this device is already existed 
			
		
			
			```go
return fmt.Errorf("error when create device: %s", err.Error())
``` 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để set, set cứng  move ra 1 func khác để set, set cứng `device.Language = langVi` 
			
		ko cần check userID là mongo id, ko empty là được ko cần check userID là mongo id, ko empty là được 
			
		bỏ cái này bỏ cái này 
			
		done done 
			
		done done  
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		đoạn này + đoạn device id iszero, viết thành 1 func khác  đoạn này + đoạn device id iszero, viết thành 1 func khác `isDeviceIDExisted` trả về boolean 
			
		done done  
			
		DeviceCreate -> CreateOptions DeviceCreate -> CreateOptions 
			
		deviceID already exists -> this device is already existed deviceID already exists -> this device is already existed 
			
		
			
			```go
return fmt.Errorf("error when create device: %s", err.Error())
``` 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để set, set cứng  move ra 1 func khác để set, set cứng `device.Language = langVi` 
			
		ko cần check userID là mongo id, ko empty là được ko cần check userID là mongo id, ko empty là được 
			
		bỏ cái này bỏ cái này 
			
		done done 
			
		done done  
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		đoạn này + đoạn device id iszero, viết thành 1 func khác  đoạn này + đoạn device id iszero, viết thành 1 func khác `isDeviceIDExisted` trả về boolean 
			
		done done  
			
		 | 
					|||||||
		CreatedAt:       timeNow,
 | 
							CreatedAt:       timeNow,
 | 
				
			||||||
		FCMToken:        payload.FCMToken,
 | 
							FCMToken:        payload.FCMToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 DeviceCreate -> CreateOptions DeviceCreate -> CreateOptions 
			
		DeviceCreate -> CreateOptions DeviceCreate -> CreateOptions 
			
		deviceID already exists -> this device is already existed deviceID already exists -> this device is already existed 
			
		deviceID already exists -> this device is already existed deviceID already exists -> this device is already existed 
			
		
			
			```go
return fmt.Errorf("error when create device: %s", err.Error())
``` 
			
		
			
			```go
return fmt.Errorf("error when create device: %s", err.Error())
``` 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để validate move ra 1 func khác để validate 
			
		move ra 1 func khác để set, set cứng  move ra 1 func khác để set, set cứng `device.Language = langVi` 
			
		move ra 1 func khác để set, set cứng  move ra 1 func khác để set, set cứng `device.Language = langVi` 
			
		ko cần check userID là mongo id, ko empty là được ko cần check userID là mongo id, ko empty là được 
			
		ko cần check userID là mongo id, ko empty là được ko cần check userID là mongo id, ko empty là được 
			
		bỏ cái này bỏ cái này 
			
		bỏ cái này bỏ cái này 
			
		done done 
			
		done done 
			
		done done  
			
		done done  
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		done done 
			
		đoạn này + đoạn device id iszero, viết thành 1 func khác  đoạn này + đoạn device id iszero, viết thành 1 func khác `isDeviceIDExisted` trả về boolean 
			
		đoạn này + đoạn device id iszero, viết thành 1 func khác  đoạn này + đoạn device id iszero, viết thành 1 func khác `isDeviceIDExisted` trả về boolean 
			
		done done  
			
		done done  
			
		 | 
				|||||||
| 
						 | 
					@ -26,12 +26,9 @@ func (s Service) isDeviceIDExisted(ctx context.Context, deviceID string) bool {
 | 
				
			||||||
| 
						
							
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		done done 
			
		 | 
				|||||||
			"deviceID": deviceID,
 | 
								"deviceID": deviceID,
 | 
				
			||||||
			"err":      err.Error(),
 | 
								"err":      err.Error(),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
| 
						
							
 chỗ này return luôn chớ? chỗ này return luôn chớ? 
			
		done done  
			
		 | 
				|||||||
	}
 | 
					 | 
				
			||||||
| 
						
							
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		 | 
				|||||||
	if !device.ID.IsZero() {
 | 
					 | 
				
			||||||
| 
						
							
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		 | 
				|||||||
		return true
 | 
							return true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return !device.ID.IsZero()
 | 
				
			||||||
| 
							
								
									
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		 | 
					|||||||
	return false
 | 
					 | 
				
			||||||
| 
						
							
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		 | 
				|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getOSName(userAgent string) string {
 | 
					func getOSName(userAgent string) string {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		gom code khúc này thành  func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false gom code khúc này thành `return !device.ID.IsZero()`
func này check device có tồn tại ko, nên nếu tồn tại trả true, ko tồn tại trả false 
			
		done done 
			
		done done 
			
		 | 
				|||||||
							
								
								
									
										2
									
								
								model.go
								
								
								
								
							
							
						
						| 
						 | 
					@ -16,7 +16,7 @@ type Device struct {
 | 
				
			||||||
| 
						
							
 deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		done done 
			
		done done 
			
		LastActivatedAt LastActivatedAt 
			
		LastActivatedAt LastActivatedAt 
			
		done done  
			
		done done  
			
		 | 
				|||||||
	AppVersion      string             `bson:"appVersion" json:"appVersion"`
 | 
						AppVersion      string             `bson:"appVersion" json:"appVersion"`
 | 
				
			||||||
	Language        string             `bson:"language" json:"language"` // vi, en
 | 
						Language        string             `bson:"language" json:"language"` // vi, en
 | 
				
			||||||
	IsMobile        bool               `bson:"isMobile" json:"isMobile"`
 | 
						IsMobile        bool               `bson:"isMobile" json:"isMobile"`
 | 
				
			||||||
	LastActivityAt time.Time          `bson:"lastActivityAt" json:"lastActivityAt"`
 | 
						LastActivatedAt time.Time          `bson:"lastActivatedAt" json:"lastActivatedAt"`
 | 
				
			||||||
| 
							
								
									
 deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		done done 
			
		LastActivatedAt LastActivatedAt 
			
		done done  
			
		deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		done done 
			
		LastActivatedAt LastActivatedAt 
			
		done done  
			
		 | 
					|||||||
	UserID          primitive.ObjectID `bson:"userID" json:"userId"`
 | 
						UserID          primitive.ObjectID `bson:"userID" json:"userId"`
 | 
				
			||||||
	AuthToken       string             `bson:"authToken" json:"authToken"`
 | 
						AuthToken       string             `bson:"authToken" json:"authToken"`
 | 
				
			||||||
	FCMToken        string             `bson:"fcmToken" json:"fcmToken"`
 | 
						FCMToken        string             `bson:"fcmToken" json:"fcmToken"`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		deviceId, json dùng camel case, sửa luôn các id khác deviceId, json dùng camel case, sửa luôn các id khác 
			
		done done 
			
		done done 
			
		LastActivatedAt LastActivatedAt 
			
		LastActivatedAt LastActivatedAt 
			
		done done  
			
		done done  
			
		 | 
				|||||||
DeviceCreate -> CreateOptions
DeviceCreate -> CreateOptions
deviceID already exists -> this device is already existed
deviceID already exists -> this device is already existed
move ra 1 func khác để validate
move ra 1 func khác để validate
move ra 1 func khác để validate
move ra 1 func khác để validate
move ra 1 func khác để validate
move ra 1 func khác để validate
move ra 1 func khác để set, set cứng
device.Language = langVimove ra 1 func khác để set, set cứng
device.Language = langViko cần check userID là mongo id, ko empty là được
ko cần check userID là mongo id, ko empty là được
bỏ cái này
bỏ cái này
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
đoạn này + đoạn device id iszero, viết thành 1 func khác
isDeviceIDExistedtrả về booleanđoạn này + đoạn device id iszero, viết thành 1 func khác
isDeviceIDExistedtrả về booleandone
done