69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package model
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// Device represents something which can connect to traggo
|
|
type Device struct {
|
|
ID int `gorm:"primary_key;unique_index;AUTO_INCREMENT"`
|
|
Token string `gorm:"unique"`
|
|
Name string
|
|
UserID int `gorm:"type:int REFERENCES users(id) ON DELETE CASCADE"`
|
|
CreatedAt time.Time
|
|
Type DeviceType
|
|
ActiveAt time.Time
|
|
}
|
|
|
|
// DeviceType the device type
|
|
type DeviceType string
|
|
|
|
// Value for db
|
|
func (t DeviceType) Value() (driver.Value, error) {
|
|
return string(t), nil
|
|
}
|
|
|
|
// Scan for db
|
|
func (t *DeviceType) Scan(value interface{}) error {
|
|
s, ok := value.([]byte)
|
|
if !ok {
|
|
return fmt.Errorf("expected []byte but was %#v", value)
|
|
}
|
|
*t = DeviceType(s)
|
|
return nil
|
|
}
|
|
|
|
// Seconds returns the amount of seconds after the device expires.
|
|
func (t DeviceType) Seconds() int {
|
|
switch t {
|
|
case TypeLongExpiry:
|
|
return 60 * 60 * 24 * 30
|
|
case TypeShortExpiry:
|
|
return 60 * 60
|
|
case TypeNoExpiry:
|
|
return 60 * 60 * 24 * 365
|
|
default:
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// Valid checks if the device type is valid.
|
|
func (t DeviceType) Valid() error {
|
|
switch t {
|
|
case TypeNoExpiry, TypeShortExpiry, TypeLongExpiry:
|
|
return nil
|
|
default:
|
|
return errors.New("unknown device type")
|
|
}
|
|
}
|
|
|
|
// Device types
|
|
const (
|
|
TypeShortExpiry DeviceType = "ShortExpiry"
|
|
TypeLongExpiry DeviceType = "LongExpiry"
|
|
TypeNoExpiry DeviceType = "NoExpiry"
|
|
)
|