add createMethod #2
			
				
			
		
		
		
	| 
						 | 
					@ -7,7 +7,6 @@ import (
 | 
				
			||||||
| 
						
							
 | 
				|||||||
 | 
					
 | 
				
			||||||
	"github.com/Selly-Modules/logger"
 | 
						"github.com/Selly-Modules/logger"
 | 
				
			||||||
	"github.com/Selly-Modules/mongodb"
 | 
						"github.com/Selly-Modules/mongodb"
 | 
				
			||||||
	"go.mongodb.org/mongo-driver/bson"
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CreateOptions ...
 | 
					// CreateOptions ...
 | 
				
			||||||
| 
						 | 
					@ -41,15 +40,8 @@ func (s Service) Create(payload CreateOptions) error {
 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Find device id existed or not
 | 
						// Find deviceID existed or not
 | 
				
			||||||
| 
							
								
									
 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  
			
		 | 
					|||||||
	device := Device{}
 | 
						if s.isDeviceIDExisted(ctx, deviceData.DeviceID) {
 | 
				
			||||||
| 
							
								
									
 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  
			
		 | 
					|||||||
	if err = col.FindOne(ctx, bson.M{"deviceID": deviceData.DeviceID}).Decode(&device); err != nil {
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
		logger.Error("devicemngt - findByDeviceID", logger.LogData{
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
			"deviceID": deviceData.DeviceID,
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
			"err":      err.Error(),
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
	}
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
	if !device.ID.IsZero() {
 | 
					 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
		return errors.New("this device is already existed")
 | 
							return errors.New("this device is already existed")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
							
								
								
									
										22
									
								
								helper.go
								
								
								
								
							
							
						
						| 
						 | 
					@ -1,9 +1,12 @@
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
package devicemngmt
 | 
					package devicemngmt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Selly-Modules/logger"
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
	ua "github.com/mssola/user_agent"
 | 
						ua "github.com/mssola/user_agent"
 | 
				
			||||||
 | 
						"go.mongodb.org/mongo-driver/bson"
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
	"go.mongodb.org/mongo-driver/mongo"
 | 
						"go.mongodb.org/mongo-driver/mongo"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +15,25 @@ func (s Service) getDeviceCollection() *mongo.Collection {
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
	return s.DB.Collection(fmt.Sprintf("%s-%s", s.TablePrefix, tableDevice))
 | 
						return s.DB.Collection(fmt.Sprintf("%s-%s", s.TablePrefix, tableDevice))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 
			
		done done 
			
		 | 
				|||||||
 | 
						var (
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
							col    = s.getDeviceCollection()
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
							device = Device{}
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
					
 | 
				
			||||||
| 
						
							
 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 err := col.FindOne(ctx, bson.M{"deviceID": deviceID}).Decode(&device); err != nil {
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
							logger.Error("devicemngt - findByDeviceID", logger.LogData{
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
								"deviceID": deviceID,
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
								"err":      err.Error(),
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
							})
 | 
				
			||||||
| 
						
							
 chỗ này return luôn chớ? chỗ này return luôn chớ? 
			
		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  
			
		 | 
				|||||||
 | 
						}
 | 
				
			||||||
| 
						
							
 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
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
					
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
 | 
					}
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
func getOSName(userAgent string) string {
 | 
					func getOSName(userAgent string) string {
 | 
				
			||||||
	uaData := ua.New(userAgent)
 | 
						uaData := ua.New(userAgent)
 | 
				
			||||||
	return uaData.OSInfo().Name
 | 
						return uaData.OSInfo().Name
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 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 
			
		 | 
				|||||||
							
								
								
									
										4
									
								
								model.go
								
								
								
								
							
							
						
						| 
						 | 
					@ -9,7 +9,7 @@ import (
 | 
				
			||||||
| 
						
							
 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  
			
		 | 
				|||||||
// Device ...
 | 
					// Device ...
 | 
				
			||||||
type Device struct {
 | 
					type Device struct {
 | 
				
			||||||
| 
						
							
 define thêm  define thêm `json` vào metadata 
			
		done done 
			
		 | 
				|||||||
	ID             primitive.ObjectID `bson:"_id" json:"_id"`
 | 
						ID             primitive.ObjectID `bson:"_id" json:"_id"`
 | 
				
			||||||
	DeviceID       string             `bson:"deviceID" json:"deviceID"` // unique
 | 
						DeviceID       string             `bson:"deviceID" json:"deviceId"` // unique
 | 
				
			||||||
| 
							
								
									
 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  
			
		 | 
					|||||||
	IP             string             `bson:"ip" json:"ip"`
 | 
						IP             string             `bson:"ip" json:"ip"`
 | 
				
			||||||
	OSName         string             `bson:"osName" json:"osName"`
 | 
						OSName         string             `bson:"osName" json:"osName"`
 | 
				
			||||||
	OSVersion      string             `bson:"osVersion" json:"osVersion"`
 | 
						OSVersion      string             `bson:"osVersion" json:"osVersion"`
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,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  
			
		 | 
				|||||||
	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"`
 | 
						LastActivityAt time.Time          `bson:"lastActivityAt" json:"lastActivityAt"`
 | 
				
			||||||
	UserID         primitive.ObjectID `bson:"userID" json:"userID"`
 | 
						UserID         primitive.ObjectID `bson:"userID" json:"userId"`
 | 
				
			||||||
| 
							
								
									
 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  
			
		 | 
					|||||||
	AuthToken      string             `bson:"authToken" json:"authToken"`
 | 
						AuthToken      string             `bson:"authToken" json:"authToken"`
 | 
				
			||||||
	FCMToken       string             `bson:"fcmToken" json:"fcmToken"`
 | 
						FCMToken       string             `bson:"fcmToken" json:"fcmToken"`
 | 
				
			||||||
	CreatedAt      time.Time          `bson:"createdAt" json:"createdAt"`
 | 
						CreatedAt      time.Time          `bson:"createdAt" json:"createdAt"`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						
							
 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