完成所有Handler的依赖注入改造: - AuthHandler: 认证相关功能 - UserHandler: 用户管理功能 - TextureHandler: 材质管理功能 - ProfileHandler: 档案管理功能 - CaptchaHandler: 验证码功能 - YggdrasilHandler: Yggdrasil API功能 新增错误类型定义: - internal/errors/errors.go: 统一的错误类型和工厂函数 更新main.go: - 使用container.NewContainer创建依赖容器 - 使用handler.RegisterRoutesWithDI注册路由 代码遵循Go最佳实践: - 依赖通过构造函数注入 - Handler通过结构体方法实现 - 统一的错误处理模式 - 清晰的分层架构
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package repository
|
|
|
|
import (
|
|
"carrotskin/internal/model"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// tokenRepositoryImpl TokenRepository的实现
|
|
type tokenRepositoryImpl struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewTokenRepository 创建TokenRepository实例
|
|
func NewTokenRepository(db *gorm.DB) TokenRepository {
|
|
return &tokenRepositoryImpl{db: db}
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) Create(token *model.Token) error {
|
|
return r.db.Create(token).Error
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) FindByAccessToken(accessToken string) (*model.Token, error) {
|
|
var token model.Token
|
|
err := r.db.Where("access_token = ?", accessToken).First(&token).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &token, nil
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) GetByUserID(userId int64) ([]*model.Token, error) {
|
|
var tokens []*model.Token
|
|
err := r.db.Where("user_id = ?", userId).Find(&tokens).Error
|
|
return tokens, err
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) GetUUIDByAccessToken(accessToken string) (string, error) {
|
|
var token model.Token
|
|
err := r.db.Where("access_token = ?", accessToken).First(&token).Error
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return token.ProfileId, nil
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) GetUserIDByAccessToken(accessToken string) (int64, error) {
|
|
var token model.Token
|
|
err := r.db.Where("access_token = ?", accessToken).First(&token).Error
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return token.UserID, nil
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) DeleteByAccessToken(accessToken string) error {
|
|
return r.db.Where("access_token = ?", accessToken).Delete(&model.Token{}).Error
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) DeleteByUserID(userId int64) error {
|
|
return r.db.Where("user_id = ?", userId).Delete(&model.Token{}).Error
|
|
}
|
|
|
|
func (r *tokenRepositoryImpl) BatchDelete(accessTokens []string) (int64, error) {
|
|
if len(accessTokens) == 0 {
|
|
return 0, nil
|
|
}
|
|
result := r.db.Where("access_token IN ?", accessTokens).Delete(&model.Token{})
|
|
return result.RowsAffected, result.Error
|
|
}
|