module

Interro::Validations

Validate inputs to your queries before saving the values to the database. Since QueryBuilder includes Validations, it allows you to reference Result and Failure by their shorthand names.

struct UserQuery < Interro::QueryBuilder(User)
  def create(*, name : String, email : String, team : Team, role : User::Role)
    Result(User).new
      .validate_presence(name: name, email: email)
      .validate_uniqueness("email") { where(email: email).any? }
      .valid do
        insert(
          name: name,
          email: email,
          team_id: team.id,
          role: role.value,
        )
      end
  end
end

Nested types