128 lines
3.4 KiB
Go
128 lines
3.4 KiB
Go
package services
|
|
|
|
import (
|
|
"go-desk-service/config"
|
|
"go-desk-service/libs"
|
|
"go-desk-service/models"
|
|
"go-desk-service/utils"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type DeviceService struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func InitDeviceService() *DeviceService {
|
|
db := libs.GetDB()
|
|
return &DeviceService{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (d *DeviceService) Create(device *models.Device) bool {
|
|
device.CreatedAt = time.Now()
|
|
device.UpdatedAt = time.Now()
|
|
d.db.Create(device)
|
|
return true
|
|
}
|
|
|
|
func (d *DeviceService) GetByUserIdAndDeviceUid(userId int64, deviceUid string) (*models.Device, error) {
|
|
var device models.Device
|
|
err := d.db.Model(&models.Device{}).Where("user_id = ? AND device_uid = ?", userId, deviceUid).First(&device).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &device, nil
|
|
}
|
|
|
|
func (d *DeviceService) Update(device *models.Device) bool {
|
|
device.UpdatedAt = time.Now()
|
|
d.db.Model(&models.Device{}).Where("id = ?", device.ID).Updates(device)
|
|
return true
|
|
}
|
|
|
|
func (d *DeviceService) UpdateByToken(token string, device *models.Device) bool {
|
|
device.UpdatedAt = time.Now()
|
|
d.db.Model(&models.Device{}).Where("token = ?", token).Updates(device)
|
|
return true
|
|
}
|
|
|
|
func (d *DeviceService) GetInfoByToken(token string) (*models.Device, error) {
|
|
var device models.Device
|
|
err := d.db.Model(&models.Device{}).Where("token = ?", token).First(&device).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &device, nil
|
|
}
|
|
|
|
func (d *DeviceService) GetInfo(id int64) *models.Device {
|
|
var device models.Device
|
|
d.db.Model(&models.Device{}).Where("id = ?", id).First(&device)
|
|
return &device
|
|
}
|
|
|
|
func (d *DeviceService) GetUserLoginStatus(userId int64) (int, error) {
|
|
var count int64
|
|
err := d.db.Model(&models.Device{}).Where("user_id = ?", userId).Count(&count).Error
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if count > 0 {
|
|
return 1, nil // 用户已登录
|
|
}
|
|
return 0, nil // 用户未登录
|
|
}
|
|
|
|
func (d *DeviceService) SetUserLoginStatus(userId int64, token, deviceUid string) {
|
|
var device models.Device
|
|
err := d.db.Model(&models.Device{}).Where("user_id = ? AND device_uid = ?", userId, deviceUid).First(&device).Error
|
|
if err != nil {
|
|
// 没查到就创建
|
|
appConfig, _ := config.LoadConfig()
|
|
Snowflake, _ := utils.NewSnowflake(appConfig.WorkerID, appConfig.DatacenterID)
|
|
DeviceId := Snowflake.NextID()
|
|
d.db.Create(&models.Device{
|
|
ID: DeviceId,
|
|
UserId: userId,
|
|
Token: token,
|
|
DeviceUid: deviceUid,
|
|
LoginStatus: 1,
|
|
UpdatedAt: time.Now(),
|
|
CreatedAt: time.Now(),
|
|
})
|
|
return
|
|
}
|
|
d.db.Model(&models.Device{}).Where("id = ?", device.ID).Updates(&models.Device{
|
|
Token: token,
|
|
LoginStatus: 1,
|
|
UpdatedAt: time.Now(),
|
|
})
|
|
}
|
|
|
|
func (d *DeviceService) Logout(token string) {
|
|
d.db.Model(&models.Device{}).Where("token = ?", token).Updates(map[string]interface{}{
|
|
"login_status": 0,
|
|
"updated_at": time.Now(),
|
|
})
|
|
}
|
|
|
|
func (d *DeviceService) GetAll(userId int64) []models.Device {
|
|
var device []models.Device
|
|
d.db.Select("id", "hostname", "platform", "platform_version", "mac", "cpu", "mem", "disk", "device_uid", "login_status", "ip").Model(&models.Device{}).Where("user_id = ?", userId).Find(&device)
|
|
|
|
return device
|
|
}
|
|
|
|
func (d *DeviceService) Login(token string) models.Device {
|
|
d.db.Model(&models.Device{}).Where("token = ?", token).Updates(&models.Device{
|
|
LoginStatus: 1,
|
|
UpdatedAt: time.Now(),
|
|
})
|
|
var device models.Device
|
|
d.db.Model(&models.Device{}).Where("token = ?", token).First(&device)
|
|
return device
|
|
}
|