package Mojolicious::Plugin::RoutesAuthDBI::Model::Roles;
#~ use Mojo::Base 'DBIx::Mojo::Model';
use Mojo::Base 'Mojolicious::Plugin::RoutesAuthDBI::Model::Base';

#~ sub new {
  #~ state $self = shift->SUPER::new(@_);
#~ }

sub access {
  my $self = ref($_[0]) ? shift : shift->new;
  $self->dbh->selectrow_array($self->sth('access role'), undef, @_);
}

sub get_role {
  my $self = ref($_[0]) ? shift : shift->new;
  
  $self->dbh->selectrow_hashref($self->sth('role'), undef, (@_));

}

sub new_role {
  my $self = ref($_[0]) ? shift : shift->new;
  
  $self->dbh->selectrow_hashref($self->sth('new role'), undef, (@_));

}

sub dsbl_enbl {
  my $self = ref($_[0]) ? shift : shift->new;
  
  $self->dbh->selectrow_hashref($self->sth('dsbl/enbl role'), undef, (@_));

}

sub profiles {# профили роли
  my $self = ref($_[0]) ? shift : shift->new;
  $self->dbh->selectall_arrayref($self->sth('role profiles'), { Slice => {} }, (shift));
}

sub roles {
  my $self = ref($_[0]) ? shift : shift->new;
  $self->dbh->selectall_arrayref($self->sth('roles'), { Slice => {} },);
}

1;

__DATA__
@@ role
select *
from "{%= $schema %}"."{%= $tables->{roles} %}"
where id=? or name=?

@@ new role
insert into "{%= $schema %}"."{%= $tables->{roles} %}" (name) values (?)
returning *;

@@ dsbl/enbl role
update "{%= $schema %}"."{%= $tables->{roles} %}"
set disable=?::boolean
where id=? or name=?
returning *;

@@ access role?cached=1
-- Доступ по роли
select count(*)
from "{%= $schema %}"."{%= $tables->{roles} %}"
where (id = ? or name = ?)
  and id = any(?)
  and not coalesce(disable, false)
;

@@ role profiles
-- Пользователи роли
select p.*
from
  "{%= $schema %}"."{%= $tables->{profiles} %}" p
  join "{%= $schema %}"."{%= $tables->{refs} %}" r on p.id=r.id2
where r.id1=?;

@@ roles
select *
from "{%= $schema %}"."{%= $tables->{roles} %}"
{%= $where %}