Files
opencatd-open/team/dao/token.go
2025-01-01 23:10:01 +08:00

121 lines
3.0 KiB
Go

package dao
import (
"errors"
"opencatd-open/team/model"
"gorm.io/gorm"
)
// 确保 TokenDAO 实现了 TokenDAOInterface 接口
var _ TokenDAOInterface = (*TokenDAO)(nil)
type TokenDAOInterface interface {
Create(token *model.Token) error
GetByID(id int) (*model.Token, error)
GetByKey(key string) (*model.Token, error)
GetByUserID(userID int) ([]model.Token, error)
Update(token *model.Token) error
Delete(id int) error
List(offset, limit int) ([]model.Token, error)
Disable(id int) error
Enable(id int) error
BatchDisable(ids []int) error
BatchEnable(ids []int) error
BatchDelete(ids []int) error
}
type TokenDAO struct {
db *gorm.DB
}
func NewTokenDAO(db *gorm.DB) *TokenDAO {
return &TokenDAO{db: db}
}
// CreateToken 创建 Token
func (dao *TokenDAO) Create(token *model.Token) error {
if token == nil {
return errors.New("token is nil")
}
return dao.db.Create(token).Error
}
// GetTokenByID 根据 ID 获取 Token
func (dao *TokenDAO) GetByID(id int) (*model.Token, error) {
var token model.Token
err := dao.db.First(&token, id).Error
if err != nil {
return nil, err
}
return &token, nil
}
// GetTokenByKey 根据 Key 获取 Token
func (dao *TokenDAO) GetByKey(key string) (*model.Token, error) {
var token model.Token
err := dao.db.Where("key = ?", key).First(&token).Error
if err != nil {
return nil, err
}
return &token, nil
}
// GetTokensByUserID 根据 UserID 获取 Token 列表
func (dao *TokenDAO) GetByUserID(userID int) ([]model.Token, error) {
var tokens []model.Token
err := dao.db.Where("user_id = ?", userID).Find(&tokens).Error
if err != nil {
return nil, err
}
return tokens, nil
}
// UpdateToken 更新 Token 信息
func (dao *TokenDAO) Update(token *model.Token) error {
if token == nil {
return errors.New("token is nil")
}
return dao.db.Save(token).Error
}
// DeleteToken 删除 Token
func (dao *TokenDAO) Delete(id int) error {
return dao.db.Delete(&model.Token{}, id).Error
}
// ListTokens 获取 Token 列表
func (dao *TokenDAO) List(offset, limit int) ([]model.Token, error) {
var tokens []model.Token
err := dao.db.Offset(offset).Limit(limit).Find(&tokens).Error
if err != nil {
return nil, err
}
return tokens, nil
}
// DisableToken 禁用 Token
func (dao *TokenDAO) Disable(id int) error {
return dao.db.Model(&model.Token{}).Where("id = ?", id).Update("status", false).Error
}
// EnableToken 启用 Token
func (dao *TokenDAO) Enable(id int) error {
return dao.db.Model(&model.Token{}).Where("id = ?", id).Update("status", true).Error
}
// BatchDisableTokens 批量禁用 Token
func (dao *TokenDAO) BatchDisable(ids []int) error {
return dao.db.Model(&model.Token{}).Where("id IN ?", ids).Update("status", false).Error
}
// BatchEnableTokens 批量启用 Token
func (dao *TokenDAO) BatchEnable(ids []int) error {
return dao.db.Model(&model.Token{}).Where("id IN ?", ids).Update("status", true).Error
}
// BatchDeleteTokens 批量删除 Token
func (dao *TokenDAO) BatchDelete(ids []int) error {
return dao.db.Where("id IN ?", ids).Delete(&model.Token{}).Error
}