I lost my first post as I was on a different computer, so I'm posting an update 
of my relevant files here as I see it my relevant files are:

package DMU::Controller::Servers;

use strict;
use warnings;
use Data::Dump qw(dump);

use base 'Catalyst::Controller';

=head1 NAME

DMU::Controller::Servers - Catalyst Controller

=head1 DESCRIPTION

Catalyst Controller.

=head1 METHODS

=cut


=head2 index 

=cut
sub get_db_types : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_type'} ],as => [ 'db_type' ],order_by=>'db_type'});
  my @responses;
  while(my $server=$rs->next) {
    my $db_type=$server->db_type;
    push(@responses,"[\"$db_type\",\"$db_type\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";

  $c->response->body($response);

}

sub get_db_names : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_name'} ],as => [ 'db_name' ],order_by=>'db_name'});
  my @responses;
  while(my $server=$rs->next) {
    my $db_name=$server->db_name;
    push(@responses,"[\"$db_name\",\"$db_name\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);


}

sub get_user_roles : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'user_role'} ],as => [ 'user_role' ],order_by=>'user_role'});
  my @responses;
  while(my $server=$rs->next) {
    my $user_role=$server->user_role;
    push(@responses,"[\"$user_role\",\"$user_role\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);

}

sub get_db_servers : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_server'} ],as => [ 'db_server' ],order_by=>'db_server'});
  my @responses;
  while(my $server=$rs->next) {
    my $db_server=$server->db_server;
    push(@responses,"[\"$db_server\",\"$db_server\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);

}

sub get_systems : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{cols=>[qw /db_server db_name/],group_by=>[qw /db_server db_name/]});
  my @responses;
  while(my $server=$rs->next) {
    my $db_server=$server->db_server;
    my $db_name=$server->db_name;
    push(@responses,"[\"$db_server\",\"$db_name\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);

}


sub get_aliass : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'alias'} ],as => [ 'alias' ],order_by=>'alias'});
  my @responses;
  while(my $server=$rs->next) {
    my $alias=$server->alias;
    push(@responses,"[\"$alias\",\"$alias\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);

}

sub add_server : Local {
  my ( $self, $c ) = @_;
  my $params=$c->req->params();
  my $primary={db_server=>undef,db_name=>undef,db_server=>undef,db_type=>undef,user_role=>undef};

  my @errors;
  while(my ($k,$v)=each(%{$primary})) {
    if(${$params}{$k} ne '') {
      ${$primary}{$k}=${$params}{$k};
    }else {
      push(@errors,$k);
    }
  }
  if(@errors) {
    my $response="[".join(",",@errors)." ]";
    $c->response->body($response);  #return missing fields
    return;
  }

  dump($primary);
  ${$primary}{alias}=${$params}{alias};

  dump($primary);
  my @rs=$c->model('DMU::Systems')->search($primary)->all();
  if(@rs){
    $c->response->body(0); #record exists
    return;
  }

  if($c->model('DMU::Systems')->create($primary)) {
    $c->response->body(1);
    return;
  }
}


sub index : Private {
    my ( $self, $c ) = @_;
    $c->stash->{template}='servers.tt'
    #$c->response->body('Matched DMU::Controller::Servers in Servers.');
}


=head1 AUTHOR

root

=head1 LICENSE

This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

1;

Attachment: servers.tt
Description: root/servers.tt

Attachment: dmu.js
Description: /root/servers/static/javascript/dmu.js


So questions that arise about best practice are:

I followed the thread about Modeling and keeping the business logic out of the 
controller, and in the model instead.  I'm not sure I completely followed it, 
and would like to regurgitate it here.   I think that this is not best practice 
(from Servers.pm file above):

sub get_db_names : Local {
  my ( $self, $c ) = @_;
  my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_name'} 
],as => [ 'db_name' ],order_by=>'db_name'});
  my @responses;
  while(my $server=$rs->next) {
    my $db_name=$server->db_name;
    push(@responses,"[\"$db_name\",\"$db_name\"]");
  }
  
  my $response="[ ".join(",",@responses)." ]";
  
  $c->response->body($response);


}


My understanding is that the stuff in the middle could and should be
tucked away in the ./lib/dmu/Model/DMU.pm.  Can anyone verify this?

I have a get_db_servers which returns a list of db_servers (localhost,
etc.).  Then I want to create a distinct list of db_servers and
db_names (DMU,mysql,test,etc) and turn the databases into hyperlinks
to my next controller named Databases.pm.  To do this I write a
function called get_systems?  I suppose much of this is stylistic and
user preference, but I'll ask anyway: Should I instead write a complex
function to handle a more then one call?  My experience tells me lots
of little ones are better, but if some one has some work horse of a
function that has multiple functions, I'd be interested in seeing it.
I can and will add a notion of parameters to filter the lists.

The javascript is tedious, is there a better way?  I do like dojo as
I'm getting my dojo fairing legs.


Thanks,

Mojo
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to