package useCases import ( "RenewCMS/internal/domain/hash" "RenewCMS/internal/domain/user" "time" ) type VerifyUserUseCase struct { userRepository user.Repository hasher hash.Hasher } func NewVerifyUserUseCase(userRepository user.Repository, hasher hash.Hasher) *VerifyUserUseCase { return &VerifyUserUseCase{userRepository, hasher} } func (v *VerifyUserUseCase) Verify(userId uint32, code string) (user.User, error) { dbUser, err := v.userRepository.Get(userId) if err != nil { return user.User{}, err } if dbUser.VerificationCode == "" || v.hasher.Compare(dbUser.VerificationCode, code) != nil { return user.User{}, user.ErrInvalidVerificationCode } if time.Now().After(dbUser.VerificationExpiration) { return user.User{}, user.ErrVerificationCodeExpired } return v.userRepository.ClearVerificationCode(userId) }