Validation.kt

package com.distasilucas.cryptobalancetracker.validation

import com.distasilucas.cryptobalancetracker.constants.CRYPTO_NAME_REGEX
import jakarta.validation.Constraint
import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext
import kotlin.reflect.KClass

@Constraint(validatedBy = [CryptoNameValidator::class])
@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
annotation class ValidCryptoName(
  val message: String = "Invalid crypto name",
  val groups: Array<KClass<*>> = [],
  val payload: Array<KClass<out Any>> = []
)

class CryptoNameValidator : ConstraintValidator<ValidCryptoName, String> {

  override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {
    val regex = CRYPTO_NAME_REGEX.toRegex()

    return value?.let { value.matches(regex) } ?: false
  }
}