package <%= fullDomainPackage %> import <%= pkg %>.<%= appName %>.error.ValidationError import <%= pkg %>.<%= appName %>.error.ValidationException import <%= pkg %>.<%= appName %>.localization.MessageCodes.System.NOT_FOUND import <%= pkg %>.<%= appName %>.localization.MessageCodes.Validation.NOT_NULL import <%= fullDomainPackage %>.infrastructure.<%= domain %>Repository import org.slf4j.Logger import org.slf4j.LoggerFactory import javax.inject.Inject import javax.inject.Singleton @Singleton class <%= domain %>Validator @Inject constructor ( private val <%= repository %>Repository: <%= domain %>Repository ) { private val logger: Logger = LoggerFactory.getLogger(<%= domain %>Validator::class.java) @Throws(ValidationException::class) fun validateSave(vo: <%= domain %>ValueObject) { logger.debug("Validating Save <%= domain %> {}", vo) val errors = doSharedValidation(vo) if (errors.isNotEmpty()) { logger.debug("Validating Save <%= domain %> {} had errors {}", vo, errors) throw ValidationException(errors) } } @Throws(ValidationException::class) fun validateUpdate(vo: <%= domain %>ValueObject) { logger.debug("Validating Update <%= domain %> {}", vo) val errors = doSharedValidation(vo) val id = vo.id if (id == null) { errors.add(element = ValidationError("id", NOT_NULL, listOf("id"))) } else { if ( !<%= repository %>Repository.exists(id = id) ) { errors.add(ValidationError("id", NOT_FOUND, listOf(id))) } } if (errors.isNotEmpty()) { logger.debug("Validating Update <%= domain %> {} had errors {}", vo, errors) throw ValidationException(errors) } } private fun doSharedValidation(vo: <%= domain %>ValueObject): MutableSet { val errors = mutableSetOf() TODO("Do validation that is shared for both save and update here") return errors } }