package ddd.domain.validation.changeUsername import shared.exceptions.ChangeUsernameException import shared.validation.AbstractValidationHandler import java.time.Duration import java.time.LocalDateTime class TimeIntervalValidation : AbstractValidationHandler() { override fun validate(context: UsernameChangeContext) { val lastChange = context.user.lastUsernameChange val policy = context.user.rank.policy lastChange?.let { val daysBetween = Duration.between(it, LocalDateTime.now(context.clock)).toDays() if (daysBetween < policy.getMaxChangeIntervalDays()) { throw ChangeUsernameException("30天内禁止重复修改") } } next(context) // 传递至下一个验证器 } }