JCS-pub/coordinator/internal/db/loaded_access_token.go

50 lines
1.9 KiB
Go

package db
import (
"time"
cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
"gorm.io/gorm/clause"
)
type LoadedAccessTokenDB struct {
*DB
}
func (db *DB) LoadedAccessToken() *LoadedAccessTokenDB {
return &LoadedAccessTokenDB{DB: db}
}
func (db *LoadedAccessTokenDB) GetByUserIDAndTokenID(ctx SQLContext, userID cortypes.UserID, tokenID cortypes.AccessTokenID) ([]cortypes.LoadedAccessToken, error) {
var ret []cortypes.LoadedAccessToken
err := ctx.Table("LoadedAccessToken").Where("UserID = ? AND TokenID = ?", userID, tokenID).Find(&ret).Error
return ret, err
}
func (*LoadedAccessTokenDB) CreateOrUpdate(ctx SQLContext, token cortypes.LoadedAccessToken) error {
return ctx.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "UserID"}, {Name: "TokenID"}, {Name: "HubID"}},
DoUpdates: clause.AssignmentColumns([]string{"LoadedAt"}),
}).Create(token).Error
}
func (*LoadedAccessTokenDB) GetExpired(ctx SQLContext, expireAt time.Time) ([]cortypes.LoadedAccessToken, error) {
var ret []cortypes.LoadedAccessToken
err := ctx.Table("LoadedAccessToken").
Select("LoadedAccessToken.*").
Joins("join UserAccessToken on UserAccessToken.UserID = LoadedAccessToken.UserID and UserAccessToken.TokenID = LoadedAccessToken.TokenID").
Where("UserAccessToken.ExpiresAt < ?", expireAt).
Find(&ret).Error
return ret, err
}
func (*LoadedAccessTokenDB) DeleteExpired(ctx SQLContext, expireAt time.Time) error {
return ctx.Table("LoadedAccessToken").
Where("UserID in (select UserID from UserAccessToken where ExpiresAt < ?)", expireAt).
Delete(&cortypes.LoadedAccessToken{}).Error
}
func (db *LoadedAccessTokenDB) DeleteAllByUserIDAndTokenID(ctx SQLContext, userID cortypes.UserID, tokenID cortypes.AccessTokenID) error {
return ctx.Table("LoadedAccessToken").Where("UserID = ? AND TokenID = ?", userID, tokenID).Delete(&cortypes.LoadedAccessToken{}).Error
}