Files
upstream-traggo/model/device.go
upstream-mirror cda7c1a474
Some checks failed
build / build (push) Failing after 3s
snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 05:24:45 +05:00

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"
)