55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package useCases
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/hash"
|
|
"RenewCMS/internal/domain/user"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type CreateUserUseCase struct {
|
|
userRepository user.Repository
|
|
hasher hash.Hasher
|
|
}
|
|
|
|
type CreateUserCommand struct {
|
|
Username string
|
|
Password string
|
|
Email string
|
|
}
|
|
|
|
func NewCreateUserUseCase(userRepository user.Repository, hasher hash.Hasher) *CreateUserUseCase {
|
|
return &CreateUserUseCase{userRepository, hasher}
|
|
}
|
|
|
|
func (g *CreateUserUseCase) CreateUser(createUser CreateUserCommand) (user.User, error) {
|
|
rawUuid := uuid.NewString()
|
|
|
|
hashedPassword, err := g.hasher.Hash(createUser.Password)
|
|
if err != nil {
|
|
return user.User{}, err
|
|
}
|
|
|
|
hashedVerificationCode, err := g.hasher.Hash(rawUuid)
|
|
if err != nil {
|
|
return user.User{}, err
|
|
}
|
|
|
|
createdUser, err := g.userRepository.Create(user.User{
|
|
Username: createUser.Username,
|
|
Password: hashedPassword,
|
|
PasswordResetCode: "",
|
|
Email: createUser.Email,
|
|
IsVerified: false,
|
|
VerificationCode: hashedVerificationCode,
|
|
VerificationExpiration: time.Now().Add(2 * time.Hour),
|
|
})
|
|
if err != nil {
|
|
return user.User{}, err
|
|
}
|
|
|
|
createdUser.VerificationCode = rawUuid
|
|
return createdUser, nil
|
|
}
|