Files
goyco/internal/repositories/refresh_token_repository.go

56 lines
1.5 KiB
Go

package repositories
import (
"time"
"gorm.io/gorm"
"goyco/internal/database"
)
type RefreshTokenRepository struct {
db *gorm.DB
}
var _ RefreshTokenRepositoryInterface = (*RefreshTokenRepository)(nil)
func NewRefreshTokenRepository(db *gorm.DB) *RefreshTokenRepository {
return &RefreshTokenRepository{db: db}
}
func (r *RefreshTokenRepository) Create(token *database.RefreshToken) error {
return r.db.Create(token).Error
}
func (r *RefreshTokenRepository) GetByTokenHash(tokenHash string) (*database.RefreshToken, error) {
var token database.RefreshToken
err := r.db.Where("token_hash = ?", tokenHash).First(&token).Error
if err != nil {
return nil, err
}
return &token, nil
}
func (r *RefreshTokenRepository) DeleteByUserID(userID uint) error {
return r.db.Where("user_id = ?", userID).Delete(&database.RefreshToken{}).Error
}
func (r *RefreshTokenRepository) DeleteExpired() error {
return r.db.Where("expires_at < ?", time.Now()).Delete(&database.RefreshToken{}).Error
}
func (r *RefreshTokenRepository) DeleteByID(id uint) error {
return r.db.Delete(&database.RefreshToken{}, id).Error
}
func (r *RefreshTokenRepository) GetByUserID(userID uint) ([]database.RefreshToken, error) {
var tokens []database.RefreshToken
err := r.db.Where("user_id = ?", userID).Find(&tokens).Error
return tokens, err
}
func (r *RefreshTokenRepository) CountByUserID(userID uint) (int64, error) {
var count int64
err := r.db.Model(&database.RefreshToken{}).Where("user_id = ?", userID).Count(&count).Error
return count, err
}