36 lines
1.2 KiB
Kotlin

package be.simplenotes.domain.validation
import be.simplenotes.domain.usecases.markdown.ValidationError
import be.simplenotes.types.NoteMetadata
import io.konform.validation.Validation
import io.konform.validation.jsonschema.maxItems
import io.konform.validation.jsonschema.maxLength
import io.konform.validation.jsonschema.uniqueItems
internal object NoteValidations {
private val metaValidator = Validation<NoteMetadata> {
NoteMetadata::title required {
addConstraint("must not be blank") { it.isNotBlank() }
maxLength(50)
}
NoteMetadata::tags required {
maxItems(5)
uniqueItems(true)
}
NoteMetadata::tags onEach {
maxLength(15)
addConstraint("must not be blank") { it.isNotBlank() }
addConstraint("must only contain alphanumeric characters, `-` and `_`") {
it.matches("^[a-zA-Z0-9-_]+\$".toRegex())
}
}
}
fun validateMetadata(meta: NoteMetadata): ValidationError? {
val errors = metaValidator.validate(meta).errors
return if (errors.isEmpty()) null
else return ValidationError(errors)
}
}