package Mojolicious::Plugin::RoutesAuthDBI::Model::Controllers;
#~ use Mojo::Base 'DBIx::Mojo::Model';
use Mojo::Base 'Mojolicious::Plugin::RoutesAuthDBI::Model::Base';
#~ sub new {
#~ state $self = shift->SUPER::new(@_);
#~ }
sub controller_ns {
my $self = ref($_[0]) ? shift : shift->new;
$self->dbh->selectrow_hashref($self->sth('controller', where => "where controller=? and (namespace=? or (?::varchar is null and namespace is null))"), undef, @_);
}
sub controller_id_ns {
my $self = ref($_[0]) ? shift : shift->new;
$self->dbh->selectrow_hashref($self->sth('controller', where=>"where (id=? or controller=?) and (namespace_id = ? or namespace = ? or (?::varchar is null and namespace is null))"), undef, (@_));
}
sub new_controller {
my $self = ref($_[0]) ? shift : shift->new;
$self->dbh->selectrow_hashref($self->sth('new controller'), undef, (@_));
}
sub controllers {
my $self = ref($_[0]) ? shift : shift->new;
$self->dbh->selectall_arrayref($self->sth('controllers'), { Slice => {} }, );
}
sub controllers_ns_id {
my $self = ref($_[0]) ? shift : shift->new;
$self->dbh->selectall_arrayref($self->sth('controllers', where=>"where n.id=? or (?::int is null and n.id is null)"), { Slice => {} }, (@_));
}
1;
__DATA__
@@ controller?cached=1
%# Не пустой namespace - четко привязанный контроллер, пустой - обязательно не привязанный контроллер
select * from (
select c.*, n.namespace, n.id as namespace_id, n.descr as namespace_descr
from
"{%= $schema %}"."{%= $tables->{controllers} %}" c
left join "{%= $schema %}"."{%= $tables->{refs} %}" r on c.id=r.id2
left join "{%= $schema %}"."{%= $tables->{namespaces} %}" n on n.id=r.id1
) s
{%= $where %}
@@ new controller
insert into "{%= $schema %}"."{%= $tables->{controllers} %}" (controller, descr)
values (?,?)
returning *;
@@ controllers
%# Контроллер либо привязан к спейсу или нет
select c.*, n.namespace, n.id as namespace_id, n.descr as namespace_descr
from "{%= $schema %}"."{%= $tables->{controllers} %}" c
left join "{%= $schema %}"."{%= $tables->{refs} %}" r on c.id=r.id2
left join "{%= $schema %}"."{%= $tables->{namespaces} %}" n on n.id=r.id1
{%= $where %};