first commit
This commit is contained in:
59
internal/modules/auth/repository.go
Normal file
59
internal/modules/auth/repository.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package auth
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type Repository interface {
|
||||
CreateRefreshToken(token *RefreshToken) error
|
||||
FindByToken(token string) (*RefreshToken, error)
|
||||
DeleteByToken(token string) error
|
||||
DeleteByUserID(userID uint) error
|
||||
ReplaceUserRefreshToken(userID uint, newToken *RefreshToken) error
|
||||
RotateRefreshToken(oldToken string, newToken *RefreshToken) error
|
||||
}
|
||||
|
||||
type repository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewRepository(db *gorm.DB) Repository {
|
||||
return &repository{db: db}
|
||||
}
|
||||
|
||||
func (r *repository) CreateRefreshToken(token *RefreshToken) error {
|
||||
return r.db.Create(token).Error
|
||||
}
|
||||
|
||||
func (r *repository) FindByToken(token string) (*RefreshToken, error) {
|
||||
var rt RefreshToken
|
||||
err := r.db.Select("id", "user_id", "token", "expires_at", "created_at").Where("token = ?", token).First(&rt).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &rt, nil
|
||||
}
|
||||
|
||||
func (r *repository) DeleteByToken(token string) error {
|
||||
return r.db.Where("token = ?", token).Delete(&RefreshToken{}).Error
|
||||
}
|
||||
|
||||
func (r *repository) DeleteByUserID(userID uint) error {
|
||||
return r.db.Where("user_id = ?", userID).Delete(&RefreshToken{}).Error
|
||||
}
|
||||
|
||||
func (r *repository) ReplaceUserRefreshToken(userID uint, newToken *RefreshToken) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Where("user_id = ?", userID).Delete(&RefreshToken{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Create(newToken).Error
|
||||
})
|
||||
}
|
||||
|
||||
func (r *repository) RotateRefreshToken(oldToken string, newToken *RefreshToken) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Where("token = ?", oldToken).Delete(&RefreshToken{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Create(newToken).Error
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user