RSS Git Download  Clone
Raw Blame History
package Routes;

use Dancer2;
use Dancer2::Plugin::Database;

use Model;
use Data::Printer;

our $VERSION = '0.1';

# for routes that just return a template of same name:
set auto_page => 1; # eg /login

my $model = Model->new( dbh => database(), app_config => config() ); # or:
# sub dbix { DBIx::Simple->new( database() ) }

# hooks =========================================================================
hook before => sub {
    # all routes need authenticated session (except /login request):
    unless ( session 'user' ) {
        my $request_path = request->path_info; # p $request_path;
        redirect '/login' unless grep $request_path eq '/'.$_, qw(login index);
    }
};

# routes =======================================================================
get '/' => sub {
    my $user = session 'user';
    my $data = $model->get_outreach_data($user); # p $data;
    template welcome => { data => $data };
};

post '/login' => sub {
    my $params = params; # p $params;

    # validate login (returns user profile or empty):
    if ( my $user = $model->authenticate_user($params) ) { # p $user;
        session user => $user;
        redirect '/';
    }
    else {
        template login => { error => 'invalid username or password' };
    }
};

get '/logout' => sub {
    app->destroy_session;
    redirect('/'); # should redirect to /login
};

# original index page:
get '/index' => sub { template index => {}, { layout => 'index' } };

#==============================================================================
# my $foo = dbix->query('select * from users where id = ?', 14)->hash; p $foo;
# my $bar = $model->get_data('select * from users limit 2'); p $bar;
# my $baz = $model->get_data('select count(*) as count from users'); p $baz;
# my $bap = database->quick_select('users', { id => 10}); p $bap;
# my $dax = database->quick_count('users', {}); p $dax;

true;