package db import ( "time" jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/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 jcstypes.UserID, tokenID jcstypes.AccessTokenID) ([]jcstypes.LoadedAccessToken, error) { var ret []jcstypes.LoadedAccessToken err := ctx.Table("LoadedAccessToken").Where("UserID = ? AND TokenID = ?", userID, tokenID).Find(&ret).Error return ret, err } func (*LoadedAccessTokenDB) CreateOrUpdate(ctx SQLContext, token jcstypes.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) ([]jcstypes.LoadedAccessToken, error) { var ret []jcstypes.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(&jcstypes.LoadedAccessToken{}).Error } func (db *LoadedAccessTokenDB) DeleteAllByUserIDAndTokenID(ctx SQLContext, userID jcstypes.UserID, tokenID jcstypes.AccessTokenID) error { return ctx.Table("LoadedAccessToken").Where("UserID = ? AND TokenID = ?", userID, tokenID).Delete(&jcstypes.LoadedAccessToken{}).Error }