The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package    #hide
  Your::User;
use Mojo::Base 'Your';

sub TABLE   {'users'}
sub COLUMNS { [qw(id group_id login_name login_password)] }
sub WHERE   { {disabled => 1} }

#See Params::Check
my $_CHECKS = {
  id         => {allow => qr/^\d+$/x},
  group_id   => {allow => qr/^\d+$/x, default => 1},
  login_name => {allow => qr/^\p{IsAlnum}{4,12}$/x},
  login_password => {
    required => 1,
    allow    => sub { $_[0] =~ /^[\w\W]{8,20}$/x; }
  }
};
sub CHECKS {$_CHECKS}

sub id {
  my ($self, $value) = @_;
  if (defined $value) {    #setting value
    $self->{data}{id} = $self->_check(id => $value);

    #make it chainable
    return $self;
  }
  $self->{data}{id} //= $self->CHECKS->{id}{default};    #getting value
}






# my $users_table = <<"TAB";
# CREATE TABLE users(
  # id INTEGER PRIMARY KEY AUTOINCREMENT,
  # login_name VARCHAR(12),
  # login_password VARCHAR(100)
  # )
# TAB
# 
# my $dbh = __PACKAGE__->dbix->dbh;
# $dbh->do($users_table)
  # unless $dbh->table_info(undef, undef, 'users', 'TABLE')->fetchrow_hashref;

1;