user_auth.go 3.6 KB
package models

import (
	"fmt"
	"time"

	"github.com/astaxie/beego/orm"
)

type UserAuth struct {
	Id              int64     `orm:"column(id);auto"`
	UserId          int64     `orm:"column(user_id)" description:"表user.id "`
	RefreshToken    string    `orm:"column(refresh_token);size(64)" description:"refresh token   "`
	RefreshTokenExp time.Time `orm:"column(refresh_token_exp);type(timestamp)" description:"refresh token 过期时间"`
	AccessToken     string    `orm:"column(access_token);size(64)" description:"access_token   "`
	AccessTokenExp  time.Time `orm:"column(access_token_exp);type(timestamp)" description:"access token 过期时间"`
	AuthCode        string    `orm:"column(auth_code);size(64)" description:"auth_code"`
	AuthCodeExp     time.Time `orm:"column(auth_code_exp);type(timestamp)" description:"auth_code过期时间"`
	DeviceType      int8      `orm:"column(device_type)" description:"设备类型 1:ios 2:安卓 3:web "`
	ClientId        string    `orm:"column(client_id);size(100)" description:"设备识别码 推送标识"`
	DeviceToken     string    `orm:"column(device_token);size(100)" description:"设备识别码 推送标识"`
	CreateAt        time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
	UpdateAt        time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
}

func (t *UserAuth) TableName() string {
	return "user_auth"
}

func init() {
	orm.RegisterModel(new(UserAuth))
}

//设备类型 1:ios 2:安卓 3:web
const (
	_ int8 = iota
	DEVICE_TYPE_IOS
	DEVICE_TYPE_ANDROID
	DEVICE_TYPE_WEB
)

//过期时长设置,单位:秒
const (
	REFRESH_TIME  int64 = 60 * 60 * 4 //4小时
	ACCESS_TIME   int64 = 60 * 60 * 2 //2小时
	AUTHCODE_TIME int64 = 60 * 60 * 2 //2小时
)

// AddUserAuth insert a new UserAuth into database and returns
// last inserted Id on success.
func AddUserAuth(m *UserAuth) (id int64, err error) {
	o := orm.NewOrm()
	id, err = o.Insert(m)
	return
}

// GetUserAuthById retrieves UserAuth by Id. Returns error if
// Id doesn't exist
func GetUserAuthById(id int64) (v *UserAuth, err error) {
	o := orm.NewOrm()
	v = &UserAuth{Id: id}
	if err = o.Read(v); err == nil {
		return v, nil
	}
	return nil, err
}

// UpdateUserAuth updates UserAuth by Id and returns error if
// the record to be updated doesn't exist
func UpdateUserAuthById(m *UserAuth) (err error) {
	o := orm.NewOrm()
	v := UserAuth{Id: m.Id}
	// ascertain id exists in the database
	if err = o.Read(&v); err == nil {
		var num int64
		if num, err = o.Update(m); err == nil {
			fmt.Println("Number of records updated in database:", num)
		}
	}
	return
}

// DeleteUserAuth deletes UserAuth by Id and returns error if
// the record to be deleted doesn't exist
func DeleteUserAuth(id int64) (err error) {
	o := orm.NewOrm()
	v := UserAuth{Id: id}
	// ascertain id exists in the database
	if err = o.Read(&v); err == nil {
		var num int64
		if num, err = o.Delete(&UserAuth{Id: id}); err == nil {
			fmt.Println("Number of records deleted in database:", num)
		}
	}
	return
}

func ValidateDdevice(deviceType int8) bool {
	switch deviceType {
	case DEVICE_TYPE_IOS:
		return true
	case DEVICE_TYPE_ANDROID:
		return true
	case DEVICE_TYPE_WEB:
		return true
	}
	return false
}

//ReadUserAuthByDevice 读取或创建
func ReadUserAuthByDevice(userId int64, deviceType int8) (*UserAuth, error) {
	o := orm.NewOrm()
	if ok := ValidateDdevice(deviceType); !ok {
		return nil, fmt.Errorf("unknown deviceType: %d", deviceType)
	}
	uAuth := &UserAuth{
		UserId:     userId,
		DeviceType: deviceType,
	}
	err := o.Read(uAuth, "UserId", "DeviceType")
	if err == nil {
		return uAuth, nil
	}
	return nil, err
}