mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 19:53:21 +02:00
139 lines
3.7 KiB
Go
139 lines
3.7 KiB
Go
package persistence
|
|
|
|
import (
|
|
domainUser "RenewCMS/internal/domain/user"
|
|
"RenewCMS/internal/infrastructure/persistence/mappers"
|
|
entity "RenewCMS/internal/infrastructure/persistence/models"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UserRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewUserRepository(db *gorm.DB) *UserRepository {
|
|
return &UserRepository{db}
|
|
}
|
|
|
|
func (u *UserRepository) Get(id uint32) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).First(&localUser, id).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
func (u *UserRepository) Create(user domainUser.User) (domainUser.User, error) {
|
|
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
|
|
hashedVerificationCode, _ := bcrypt.GenerateFromPassword([]byte(user.VerificationCode), 12)
|
|
|
|
creationResult := u.db.Create(&entity.User{
|
|
Username: user.Username,
|
|
Password: string(hashedPassword),
|
|
Email: user.Email,
|
|
VerificationCode: string(hashedVerificationCode),
|
|
VerificationExpiration: user.VerificationExpiration,
|
|
})
|
|
if creationResult.Error != nil {
|
|
return domainUser.User{}, creationResult.Error
|
|
}
|
|
|
|
var createdUser entity.User
|
|
creationResult.Scan(&createdUser)
|
|
|
|
return mappers.UserToDomain(createdUser),
|
|
nil
|
|
}
|
|
|
|
func (u *UserRepository) Delete(id uint32) error {
|
|
return u.db.Delete(&domainUser.User{}, id).Error
|
|
}
|
|
|
|
func (u *UserRepository) GetAll() []domainUser.User {
|
|
var users []entity.User
|
|
u.db.Model(&entity.User{}).Find(&users)
|
|
|
|
var domainUsers []domainUser.User
|
|
for _, localUser := range users {
|
|
domainUsers = append(domainUsers, mappers.UserToDomain(localUser))
|
|
}
|
|
|
|
return domainUsers
|
|
}
|
|
|
|
func (u *UserRepository) GetByUsername(username string) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).Where("username = ?", username).First(&localUser).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
func (u *UserRepository) GetByEmail(email string) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).Where("email = ?", email).First(&localUser).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
func (u *UserRepository) UpdateVerificationStatus(userId uint32, isVerified bool) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).First(&localUser, userId).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
localUser.IsVerified = isVerified
|
|
err = u.db.Save(&localUser).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
func (u *UserRepository) UpdatePassword(userId uint32, password string) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).First(&localUser, userId).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), 12)
|
|
localUser.Password = string(hashedPassword)
|
|
err = u.db.Save(&localUser).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
func (u *UserRepository) UpdatePasswordResetCode(userId uint32, code string) (domainUser.User, error) {
|
|
var localUser entity.User
|
|
err := u.db.Model(&entity.User{}).First(&localUser, userId).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
hashedCode, _ := bcrypt.GenerateFromPassword([]byte(code), 12)
|
|
localUser.PasswordResetCode = string(hashedCode)
|
|
err = u.db.Save(&localUser).Error
|
|
if err != nil {
|
|
return domainUser.User{}, err
|
|
}
|
|
|
|
return mappers.UserToDomain(localUser), nil
|
|
}
|
|
|
|
var _ domainUser.Repository = &UserRepository{}
|