DRY up: extracted validation code into concern