package model

// 用户的token
type Token struct {
	ID             int64  `gorm:"column:id;primaryKey;autoIncrement" json:"id,omitempty"`
	UserID         int64  `gorm:"column:user_id;not null;index:idx_token_user_id" json:"userid,omitempty"`
	Name           string `gorm:"column:name;not null;index:idx_token_name" json:"name,omitempty" binding:"required,min=1,max=20"`
	Key            string `gorm:"column:key;not null;uniqueIndex:idx_token_key;comment:token key" json:"key,omitempty"`
	Active         *bool  `gorm:"column:active;default:true" json:"active,omitempty"`                   //
	Quota          *int64 `gorm:"column:quota;type:bigint;default:0" json:"quota,omitempty"`            // default 0
	UnlimitedQuota *bool  `gorm:"column:unlimited_quota;default:true" json:"unlimited_quota,omitempty"` // set Quota 1  unlimited
	UsedQuota      *int64 `gorm:"column:used_quota;type:bigint;default:0" json:"used_quota,omitempty"`
	ExpiredAt      *int64 `gorm:"column:expired_at;type:bigint;default:0" json:"expired_at,omitempty"`
	NeverExpired   *bool  `gorm:"column:never_expires;type:bigint;" json:"never_expires,omitempty"`
	CreatedAt      int64  `gorm:"column:created_at;type:bigint;autoCreateTime" json:"created_at,omitempty"`
	LastUsedAt     int64  `gorm:"column:lastused_at;type:bigint;autoUpdateTime" json:"lastused_at,omitempty"`
	User           *User  `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"-"`
}

func (Token) TableName() string {
	return "tokens"
}
