This commit is contained in:
fabio
2026-02-22 17:47:28 +01:00
parent 722dd85fc6
commit 036aadb09a
18 changed files with 746 additions and 39 deletions

View File

@@ -0,0 +1,42 @@
package repo
import (
"errors"
"time"
"trustcontact/internal/models"
"gorm.io/gorm"
)
type EmailVerificationTokenRepo struct {
db *gorm.DB
}
func NewEmailVerificationTokenRepo(db *gorm.DB) *EmailVerificationTokenRepo {
return &EmailVerificationTokenRepo{db: db}
}
func (r *EmailVerificationTokenRepo) Create(token *models.EmailVerificationToken) error {
return r.db.Create(token).Error
}
func (r *EmailVerificationTokenRepo) FindValidByHash(tokenHash string, now time.Time) (*models.EmailVerificationToken, error) {
var token models.EmailVerificationToken
err := r.db.Where("token_hash = ? AND expires_at > ?", tokenHash, now).First(&token).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &token, nil
}
func (r *EmailVerificationTokenRepo) DeleteByID(id uint) error {
return r.db.Delete(&models.EmailVerificationToken{}, id).Error
}
func (r *EmailVerificationTokenRepo) DeleteByUserID(userID uint) error {
return r.db.Where("user_id = ?", userID).Delete(&models.EmailVerificationToken{}).Error
}

View File

@@ -0,0 +1,42 @@
package repo
import (
"errors"
"time"
"trustcontact/internal/models"
"gorm.io/gorm"
)
type PasswordResetTokenRepo struct {
db *gorm.DB
}
func NewPasswordResetTokenRepo(db *gorm.DB) *PasswordResetTokenRepo {
return &PasswordResetTokenRepo{db: db}
}
func (r *PasswordResetTokenRepo) Create(token *models.PasswordResetToken) error {
return r.db.Create(token).Error
}
func (r *PasswordResetTokenRepo) FindValidByHash(tokenHash string, now time.Time) (*models.PasswordResetToken, error) {
var token models.PasswordResetToken
err := r.db.Where("token_hash = ? AND expires_at > ?", tokenHash, now).First(&token).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &token, nil
}
func (r *PasswordResetTokenRepo) DeleteByID(id uint) error {
return r.db.Delete(&models.PasswordResetToken{}, id).Error
}
func (r *PasswordResetTokenRepo) DeleteByUserID(userID uint) error {
return r.db.Where("user_id = ?", userID).Delete(&models.PasswordResetToken{}).Error
}

View File

@@ -27,3 +27,31 @@ func (r *UserRepo) FindByID(id uint) (*models.User, error) {
return &user, nil
}
func (r *UserRepo) FindByEmail(email string) (*models.User, error) {
var user models.User
if err := r.db.Where("email = ?", email).First(&user).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &user, nil
}
func (r *UserRepo) Create(user *models.User) error {
return r.db.Create(user).Error
}
func (r *UserRepo) SetEmailVerified(userID uint, verified bool) error {
return r.db.Model(&models.User{}).
Where("id = ?", userID).
Update("email_verified", verified).Error
}
func (r *UserRepo) UpdatePasswordHash(userID uint, passwordHash string) error {
return r.db.Model(&models.User{}).
Where("id = ?", userID).
Update("password_hash", passwordHash).Error
}